isn';在范围内吗?(node.js) var http=require('http'); var url=require('url'); var util=require('util'); var fs=需要('fs'); var body_404=“404错误”; http.createServer(函数(req,res){ var what=url.parse(“http://127.0.0.1:1235“+请求url); var pathname=what.pathname; 开关(路径名){ 案例“/: 路径名=“/www/index.html”; 违约: res.writeHead(200,{'Content-type':'text/html'}); ret=res; fs.stat(“.”+路径名,函数(err,stat){ 如果(错误) res.write(正文404); 其他的 res.write(fs.readFileSync(“.”+路径名)); }); res.end(); 打破 } }).听(1235,'127.0.0.1');

isn';在范围内吗?(node.js) var http=require('http'); var url=require('url'); var util=require('util'); var fs=需要('fs'); var body_404=“404错误”; http.createServer(函数(req,res){ var what=url.parse(“http://127.0.0.1:1235“+请求url); var pathname=what.pathname; 开关(路径名){ 案例“/: 路径名=“/www/index.html”; 违约: res.writeHead(200,{'Content-type':'text/html'}); ret=res; fs.stat(“.”+路径名,函数(err,stat){ 如果(错误) res.write(正文404); 其他的 res.write(fs.readFileSync(“.”+路径名)); }); res.end(); 打破 } }).听(1235,'127.0.0.1');,node.js,Node.js,我想知道为什么fs.stat回调中的write方法实际上没有向客户机写入任何内容。我相信res在范围之内 您在res.write之前调用res.end。因此,没有任何东西被写出来。将对res.end的调用移动到stat处理程序中: var http = require('http'); var url= require('url'); var util= require('util'); var fs = require('fs'); var body_404="<html&g

我想知道为什么fs.stat回调中的write方法实际上没有向客户机写入任何内容。我相信res在范围之内

您在
res.write
之前调用
res.end
。因此,没有任何东西被写出来。将对
res.end
的调用移动到stat处理程序中:

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

var body_404="<html><body><center>404 error</center></body></html>";

http.createServer(function (req,res) {
 var what = url.parse("http://127.0.0.1:1235"+req.url);
 var pathname = what.pathname;

 switch(pathname) { 
  case "/":
   pathname="/www/index.html";
  default:
   res.writeHead(200, {'Content-type' : 'text/html'});
   ret = res; 
   fs.stat("."+pathname, function (err, stat) {
    if(err)
     res.write(body_404);
    else
     res.write(fs.readFileSync("."+pathname));
   });
   res.end();
   break;
 }
}).listen(1235, '127.0.0.1');
var http=require('http');
var url=require('url');
var util=require('util');
var fs=需要('fs');
var path=require('path');
var body_404=“404错误”;
var rootPath=path.abspath(“.”);
http.createServer(函数(req,res){
var what=url.parse(“http://127.0.0.1:1235“+请求url);
var pathname=what.pathname;
var缓冲区;
开关(路径名){
案例“/:
路径名=“/www/index.html”;
违约:
var filename=path.join(rootPath,pathname);
if(filename.indexOf(rootPath)!==0){
res.writeHead(400,{'Content-type':'text/plain'});
res.write('避免目录遍历攻击');
res.end();
回来
}
fs.readFile(函数(错误、内容){
如果(错误){
res.writeHead(404,{'Content-type':'text/html'});
res.write(正文404);
}否则{
res.writeHead(200,{'Content-type':'text/html'});
res.write(内容);
}
res.end();
});
打破
}
}).听(1235,'127.0.0.1');

还请注意,您的原始代码易受攻击,并且在res.write之前调用res.end时遇到了介于os.stat和os.readFileSync之间的问题。因此,没有任何东西被写出来。将对
res.end
的调用移动到stat处理程序中:

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

var body_404="<html><body><center>404 error</center></body></html>";

http.createServer(function (req,res) {
 var what = url.parse("http://127.0.0.1:1235"+req.url);
 var pathname = what.pathname;

 switch(pathname) { 
  case "/":
   pathname="/www/index.html";
  default:
   res.writeHead(200, {'Content-type' : 'text/html'});
   ret = res; 
   fs.stat("."+pathname, function (err, stat) {
    if(err)
     res.write(body_404);
    else
     res.write(fs.readFileSync("."+pathname));
   });
   res.end();
   break;
 }
}).listen(1235, '127.0.0.1');
var http=require('http');
var url=require('url');
var util=require('util');
var fs=需要('fs');
var path=require('path');
var body_404=“404错误”;
var rootPath=path.abspath(“.”);
http.createServer(函数(req,res){
var what=url.parse(“http://127.0.0.1:1235“+请求url);
var pathname=what.pathname;
var缓冲区;
开关(路径名){
案例“/:
路径名=“/www/index.html”;
违约:
var filename=path.join(rootPath,pathname);
if(filename.indexOf(rootPath)!==0){
res.writeHead(400,{'Content-type':'text/plain'});
res.write('避免目录遍历攻击');
res.end();
回来
}
fs.readFile(函数(错误、内容){
如果(错误){
res.writeHead(404,{'Content-type':'text/html'});
res.write(正文404);
}否则{
res.writeHead(200,{'Content-type':'text/html'});
res.write(内容);
}
res.end();
});
打破
}
}).听(1235,'127.0.0.1');

还请注意,您的原始代码易受攻击,并且在
os.stat
os.readFileSync

之间存在漏洞。我用更多注释更新了答案-您当前的代码包含安全漏洞。我用更多注释更新了答案-您当前的代码包含安全漏洞。