在中间件中停留在console.log(JSON.stringify(req))上

时间:2015-07-24 07:43:12

标签: 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: " + JSON.stringify(session));
    console.log("req non json: " + req);
    console.log("req: " + JSON.stringify(req));  //stuck
    return next();
});

2 个答案:

答案 0 :(得分:1)

这里发生的是你正在尝试对req进行字符串化,这是一个不可串行的对象。

console.log()接受构造函数中的许多参数,如果你提供一个参数并使用+那么你正在尝试将两个字符串传递给{{1}字符串化或console.log()对象而不是打印对象的内容。

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

<强> .toString() 这是您想要的效果,内部console.log("string as argument one", [object])将了解您要打印字符串和对象的内容,而不是console.log(),这通常是[对象]或不存在(并非所有对象都有.toString(),因为它们可以使用不同的.toString()创建。

答案 1 :(得分:1)

正如 Gemtastic 所说,req 不能被字符串化。您可以使用自定义函数将您的请求与您需要的所有数据进行字符串化。应该是这样的:

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,
});