2

当我从客户端连接到我的 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();
});
4

2 回答 2

2

正如 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,
});
于 2021-02-05T20:36:30.177 回答
1

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

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

我将尝试解释您应该做什么以及为什么:

console.log("string as argument one", [object]) 这是您想要的效果,内部console.log()会理解您想要打印字符串和对象的内容,而不是.toString()最常见的是 [Object object] 或不存在的(并非所有对象都有,.toString()因为它们可以被创建出来的不同prototypes

于 2015-07-24T08:46:46.027 回答