1

node.js 的新手,并在下面的链接中遵循基本教程。 https://www.tutorialspoint.com/nodejs/nodejs_web_module.htm

var http = require('http');
var fs = require('fs');
var url = require('url');

// Create a server
http.createServer( function (request, response) {  
   // Parse the request containing file name
   var pathname = url.parse(request.url).pathname;
   
   // Print the name of the file for which request is made.
   console.log("Request for " + pathname + " received.");
   
   // Read the requested file content from file system
   fs.readFile(pathname.substr(1), function (err, data) {
      if (err) {
         console.log(err);
         // HTTP Status: 404 : NOT FOUND
         // Content Type: text/plain
         response.writeHead(404, {'Content-Type': 'text/html'});
      }else {   
         //Page found     
         // HTTP Status: 200 : OK
         // Content Type: text/plain
         response.writeHead(200, {'Content-Type': 'text/html'});    
         
         // Write the content of the file to response body
         response.write(data.toString());       
      }
      // Send the response body 
      response.end();
   });   
}).listen(8081);

// Console will print the message
console.log('Server running at http://127.0.0.1:8081/');

创建了 2 个文件 index.html 和 server.js 与帖子完全相同。然后当我尝试运行它时

节点服务器.js

没有显示错误消息,但是当我尝试在浏览器上访问该页面时,它无法连接,并且控制台中显示错误。

任何帮助将不胜感激。

服务器运行在http://127.0.0.1:8081/

请求/收到。

{ 错误:ENOENT:没有这样的文件或目录,打开'' errno:-2,代码:'ENOENT',系统调用:'open',路径:'' }

4

1 回答 1

5

在给定的代码中,您有:

// Print the name of the file for which request is made.
console.log("Request for " + pathname + " received.");

// Read the requested file content from file system
fs.readFile(pathname.substr(1), function (err, data) {

因为路径是/pathname.substr(1)导致空字符串。并且因为您没有没有名称的文件,fs.readFile所以找不到要读取的文件,这会导致ENOENT错误。

给定的代码不会自动将空字符串解释为index.html.

所以你要么必须http://127.0.0.1:8081/index.html在浏览器中使用。或者更改代码的逻辑以将空字符串解释为index.html.

于 2017-05-03T12:37:12.993 回答