Node.js 在中间件中的console.log(JSON.stringify(req))上卡住

Node.js 在中间件中的console.log(JSON.stringify(req))上卡住,node.js,express,websocket,console.log,express-4,Node.js,Express,Websocket,Console.log,Express 4,当我从客户端连接到Express 4 node.js websocket服务器并尝试记录req时,整个程序就卡住了。它仍然接受新的连接并将其执行到同一个console.log,但随后会卡住。我试图弄清楚req包含什么,但这种方法似乎不起作用 app.use(function (req, res, next) { console.log("middleware"); var session = req.session; console.log("session: " + J

当我从客户端连接到Express 4 node.js websocket服务器并尝试记录req时,整个程序就卡住了。它仍然接受新的连接并将其执行到同一个console.log,但随后会卡住。我试图弄清楚req包含什么,但这种方法似乎不起作用

app.use(function (req, res, next) {
    console.log("middleware");
    var session = req.session;
    console.log("session: " + JSON.stringify(session));
    console.log("req non json: " + req);
    console.log("req: " + JSON.stringify(req));  //stuck
    return next();
});

这里发生的事情是,您正在尝试字符串化req,一个不可字符串化的对象

console.log()
接受构造函数中的许多参数,如果您提供一个参数并使用
+
发生的情况是,您试图将两个字符串传递到
console.log()
字符串化或
.toString()
对象,而不是打印对象的内容

我会试着解释你应该做什么以及为什么:

console.log(“字符串作为参数一,[object])

这是您想要的效果,在内部
console.log()
会理解您想要打印字符串和对象的内容,而不是
.toString()
,后者通常是[object object object]或不存在(并非所有对象都有
.toString())
,因为它们可以由不同的
原型创建。

正如Gemtastic所说,req无法字符串化。您可以使用自定义函数将您的请求字符串化为所需的所有数据。应该是这样的:

const reqData=JSON.stringify({
标题:请求标题,
方法:req.method,
url:req.url,
httpVersion:req.httpVersion,
body:req.body,
cookies:req.cookies,
路径:请求路径,
协议:请求协议,
查询:req.query,
主机名:req.hostname,
ip:req.ip,
originalUrl:req.originalUrl,
参数:请求参数,
});

它可能没有被卡住,但抛出了一个异常,因为由于循环引用,您很可能无法将
req
字符串化。请尝试
console.log('req:',req)
。谢谢您的帮助,但是“console.log('req:',req)”与“console.log('req:'+req);”有何不同?使用
+
字符串化
req
,将其作为一个单独的参数将
console.log()
使用。@Waltari这是字符串连接。req对象首先附加到“字符串”中。