在nodejs中结束的麻烦

时间:2016-12-21 03:02:12

标签: javascript node.js

我试图在没有快递的情况下创建服务器。识别网址,然后用html回答。

如果网址是' /'响应是index.html,如果网址是' / bio'响应是bio.html

问题是当我想回到' /'并在' / bio'

之后获得索引
http.createServer(function (req,res){
  var pathName = url.parse(req.url).pathname;
  console.log(pathName);

  if(pathName === '/bio'){
    fs.readFile("./bio.html", function (a, bio){
      res.writeHead(200, {"Content-Type": "text/html"});
      res.write(bio);
      res.end();
    });
  };

  fs.readFile('./index.html', function(err, index){
    console.log(req.url);
    res.writeHead(200, {"Content-Type": "text/html"});
    res.write(index);
    res.end();
  });

}).listen(8888);

我什么时候应该结束回复?

2 个答案:

答案 0 :(得分:1)

从技术上讲,您应该只允许一个代码分支调用res.end()

在您的情况下,代码应该如下所示

if(pathName === '/bio'){
  fs.readFile("./bio.html", function (a, bio){
    res.writeHead(200, {"Content-Type": "text/html"});
    res.write(bio);
    res.end();
  });
}
else {
  fs.readFile('./index.html', function(err, index){
    console.log(req.url);
    res.writeHead(200, {"Content-Type": "text/html"});
    res.write(index);
    res.end();
  });
}

我建议引入一个通用的静态文件处理程序:

// assuming we have access to the current `res` object
function serveStatic(filePath, callback) {
  fs.readFile(filePath, function () {
    res.writeHead(200, {"Content-Type": "text/html"});
    res.write(bio);
    res.end();

    callback();
  })
}

var filePath;
if(pathName === '/bio') {
  filePath = './bio.html';
}
else {
  filePath = './index.html';
}

serveStatic(filePath, function () {
  console.log('Done!');
});

答案 1 :(得分:0)

您需要在发送回复时停止流程,尝试return res.end()代替res.end()