我正在尝试构建一个 Node.js 服务器,其控制台日志记录类似于 Django 开发服务器的控制台日志记录。例如。
[27/Jun/2011 15:26:50] "GET /?test=5 HTTP/1.1" 200 545
以下 server.js(基于 Node Beginner Book tutorial )为我获取时间和请求信息:
var http = require("http");
var url = require ("url");
var port = 1234;
function start(route, handle) {
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
var query = url.parse(request.url).query;
route(handle, pathname, query, response);
logRequest(request);
}
http.createServer(onRequest).listen(port);
console.log("\nServer running at http://192.168.1.5:" + port + "/");
console.log("Press CONTROL-C to quit.\n");
}
function logRequest(request) {
var pathname = url.parse(request.url).pathname;
var query = url.parse(request.url).query;
if (query == undefined) {
query = "";
}
var currentDate = new Date();
var day = currentDate.getDate();
var month = currentDate.getMonth() + 1;
var year = currentDate.getFullYear();
var hours = currentDate.getHours();
var minutes = currentDate.getMinutes();
var seconds = currentDate.getSeconds();
if (minutes < 10) {
minutes = "0" + minutes;
}
if (seconds < 10) {
seconds = "0" + seconds;
}
console.log("[" + year + "/" + month + "/" + day +
" " + hours + ":" + minutes + ":" + seconds + '] "' +
request.method + " " + pathname + query +
" HTTP/" + request.httpVersion + '"');
}
exports.start = start;
问题:我将如何更新此代码以获取 response.statusCode 以及日志输出中的“545”数字?
当我尝试将响应对象添加到 logRequest 函数时,响应 statusCode 始终为“200”,即使我知道(通过调试日志记录)我的 router.js 正在生成 404 错误。
最佳答案
如果您使用的是您链接的教程中的路由方法,那么使用 response.statusCode 不起作用的原因是因为它们使用此行设置了 404 状态代码
response.writeHead(404, {"Content-Type": "text/html"});
如果您查看 Node.JS Docs - writeHead 的文档,它会指出 .writeHead 不会设置 .statusCode 值。如果您想使用 .statusCode 值,您应该将
route
方法中的行更改为如下所示:response.statusCode = 404;
response.setHeader("Content-Type", "text/html");
直接为 statusCode 赋值并使用“隐式” header 声明(setHeader 而不是 writeHead)将为用户产生相同的结果,但在您这边,您稍后将可以在日志方法中访问 statusCode。
关于javascript - Node.js - 将响应状态代码记录到控制台(一个 Django 开发服务器),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6498685/