当我从我的客户端连接到我的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();
});
正如Gemtastic所说,请求不能被字符串化。您可以使用自定义函数将您的请求与所需的所有数据进行字符串化。应该是这样的:
const reqData = JSON.stringify({
headers: req.headers,
method: req.method,
url: req.url,
httpVersion: req.httpVersion,
body: req.body,
cookies: req.cookies,
path: req.path,
protocol: req.protocol,
query: req.query,
hostname: req.hostname,
ip: req.ip,
originalUrl: req.originalUrl,
params: req.params,
});
这里发生的事情是,您试图将req字符串化,一个不可字符串化的对象。
console.log()
在构造函数中接受许多参数,如果你提供一个参数并使用+
,会发生的情况是你试图将两个字符串传递给console.log()
或.toString()
,而不是打印对象的内容。
我将试着解释你应该做什么以及为什么:
console.log("string as argument one", [object])
这是你想要的效果,内部console.log()
将理解你想要打印字符串和对象的内容,而不是.toString()
,通常是[object object]或不存在(不是所有对象都有.toString()
,因为它们可以从不同的prototypes
创建)。