没有ExpressJs,无法设置响应状态代码

时间:2017-12-21 16:17:35

标签: node.js

无法在node.js 8.9中设置响应状态代码(尝试2小时后)

尝试:res.statusCode = 404;res.writeHead(404,{}); 两者都不起作用。

注意:不要使用expressJs

示例代码

var http = require('http');

//create a server object:
http.createServer(function (req, res) {
try{
  res.write('Hie !'); //write a response to the client
  res.statusCode = 404;
  //res.writeHead(404,{});
  res.end(); //end the response
}catch(e){
  console.error(e);
}
}).listen(8080); //the server object listens on port 8080

注意:不要使用expressJs

2 个答案:

答案 0 :(得分:4)

非常简单,在向响应流写入任何内容之前必须设置statusCode,否则它是隐式的200代码。

另外,你应该知道你的try ... catch块在这样的回调场景中是无用的,除非你正在做一些可能失败的同步代码。

如果您将代码更新为以下代码,它将起作用:

var http = require('http');

//create a server object:
http.createServer(function (req, res) {
  res.statusCode = 404;
  res.write('Hi!'); //write a response to the client
  res.end(); //end the response
}).listen(8080); //the server object listens on port 8080

您也可以使用ES6语法,出于各种原因,有些人会更好:

const http = require('http');

http.createServer((req, res) => {
    res.statusCode = 404;
    res.write('Hi!');

    res.end();

}).listen(8080);

答案 1 :(得分:-2)

根据Express V5

res.sendStatus(statusCode)
  

Express 5不再支持签名res.send(status),其中status是一个数字。而是使用res.sendStatus(statusCode)函数,该函数设置HTTP响应头状态代码并发送代码的文本版本:“未找到”,“内部服务器错误”,依此类推。

根据Express (Version 4+) docs

res.status(400);