📌  相关文章
📜  如何创建一个简单的 Web 服务器,可以通过“readFile”函数读取给定磁盘上的给定文件?

📅  最后修改于: 2022-05-13 01:56:17.553000             🧑  作者: Mango

如何创建一个简单的 Web 服务器,可以通过“readFile”函数读取给定磁盘上的给定文件?

要创建 Web 服务器,我们需要使用require()方法导入“http”模块,并使用 HTTP 模块的createServer()方法创建服务器。

句法:

const http = require('http')
const server = createServer(callback).listen(port,hostname);

现在在 createServer() 方法的回调中,我们需要从本地目录中读取文件并使用我们的服务器提供它。为此,我们需要导入“fs”模块并使用它的readFile()方法。

句法:

导入“fs”模块:

const fs = require('fs')

fs.readFile():

fs.readFile( filename, encoding, callback_function)

一旦我们完成读取文件,我们需要在我们的服务器上呈现它。

项目设置:创建文件serving_files.js并将其目录设置为终端中的当前目录。

项目设置

示例 1:在此示例中,我们在代码中指定了文件名 serving_files.js,因此当我们在浏览器中运行http://localhost/时,我们的文件将被渲染。

serving_files.js
// Import http and fs 
const fs=require('fs')
const http = require( 'http')
  
// Creating Server 
http.createServer((req, res) =>{
  
    // Reading file 
    fs.readFile(`serving_files.js`, function (err,filedata) {
      if (err) {
  
        // Handling error 
        res.writeHead(404);
        res.end(JSON.stringify(err));
        return;
      }
  
      // serving file to the server 
      res.writeHead(200);
      res.end(filedata);
    });
}).listen(80,'localhost');


serving_files.js
// Import http and fs 
const fs=require('fs')
const http = require( 'http')
  
// Creating Server 
http.createServer((req, res) =>{
  
    // Reading file 
    fs.readFile(__dirname + req.url, function (err,filedata) {
      if (err) {
  
        // Handling error 
        res.writeHead(404);
        res.end(JSON.stringify(err));
        return;
      }
      // serving file to the server 
      res.writeHead(200);
      res.end(filedata);
    });
}).listen(80,'localhost');


运行应用程序的步骤:在终端中运行以下命令来启动服务器:

node serving_files.js

输出:

// Import http and fs 
const fs=require('fs')
const http = require( 'http')

// Creating Server 
http.createServer((req, res) =>{
    // Reading file 
    fs.readFile(`serving_files.js`, function (err,filedata){
      if (err) {
        //   Handling error 
        res.writeHead(404);
        res.end(JSON.stringify(err));
        return;
      }
    //   serving file to the server 
      res.writeHead(200);
      res.end(filedata);
    });
}).listen(80,'localhost');

浏览器内输出

示例 2:在此示例中,我们将通过在请求 URL 中传递我们的文件名,而不是在我们的代码中指定文件名。因此,通过在请求 URL 中指定文件名,我们可以从服务器访问任何文件,并且我们将不仅限于检索一个文件。

因此,要从我们的服务器打开任何文件,我们需要通过以下方式传递我们的请求 URL:

http://hostname:port/file_name

在下面的示例中,我们的请求 URL 将是http://localhost/serving_files.js

serving_files.js

// Import http and fs 
const fs=require('fs')
const http = require( 'http')
  
// Creating Server 
http.createServer((req, res) =>{
  
    // Reading file 
    fs.readFile(__dirname + req.url, function (err,filedata) {
      if (err) {
  
        // Handling error 
        res.writeHead(404);
        res.end(JSON.stringify(err));
        return;
      }
      // serving file to the server 
      res.writeHead(200);
      res.end(filedata);
    });
}).listen(80,'localhost');

运行应用程序的步骤:在终端中运行以下命令来启动服务器:

node serving_files.js

输出:

// Import http and fs 
const fs=require('fs')
const http = require( 'http')

// Creating Server 
http.createServer((req, res) =>{
    // Reading file 
    fs.readFile(__dirname + req.url, function (err,filedata) {
      if (err) {
        //   Handling error 
        res.writeHead(404);
        res.end(JSON.stringify(err));
        return;
      }
    //   serving file to the server 
      res.writeHead(200);
      res.end(filedata);
    });
}).listen(80,'localhost');

通过请求 URL 提供文件

注意:在上面的示例中,我们使用了端口 80,这是默认的 HTTP 端口。因此,即使我们没有在请求 URL 中指定端口,默认情况下也将其设为 80。

如果您使用任何其他端口号,请在您的请求 URL 中指定它。例如,如果您使用端口 8000,那么您的请求 URL 将是

http://localhost:8000/serving_files.js