我正在学习NodeJs,目前我刚刚做了一个中间件功能,它将发送整个req对象作为json对象中单个键值对的值(我知道它很长),但只是为了学习目的,我做了它。
现在我知道req本身就是一个对象,值必须是一个字符串,所以我尝试转换它:-
这是我的代码
function prod (req, res) {
console.log("This is a body of Req :- " , req );
// const x = JSON.stringify(req); // Method 1 // throws error of TypeError: Converting circular structure to JSON
// const x = String(req) // Method 2 // displays [object object]
// const x = req.toString() // Method 3 // displays [object object]
res.status(200).json({"Request": `${x}`});
}
module.exports = prod
现在我一个接一个地尝试了这三种方法,但都没有达到预期的效果。方法1显示TypeError: Converting circular structure to JSON
,而其他2种方法将其显示为[object object]
。然而,在console.log()
行中,整个req被单独打印。有人能告诉我为什么response
&还有我如何在res
的json主体中发送整个req
Express中的请求和响应对象并不像您所期望的那样是简单的JSON对象;它们是具有不可序列化方法的类。因此出现了"将循环结构转换为JSON"错误。
您要查找的变量可能是req.body
,所以与其将请求本身字符串化,不如尝试JSON.stringify(req.body)
。这就行了。
还要记住,HTTP GET请求通常没有附加正文,因此,如果您正在构建的路由是针对GET请求的,那么它可能会显示为"未定义"。
Express.jsexpress.json()函数
express.json()函数是express中内置的中间件函数。它使用JSON有效负载解析传入请求,并基于主体解析器
语法:
express.json( [options] )
您也可以使用app.use(express.json());
它是转换json格式中的req.body值
示例
const express = require('express');
const app = express();
const PORT = 3000;
app.use(express.json());
app.post('/', function (req, res) {
console.log(req.body.name)
res.end();
})
app.listen(PORT, function (err) {
if (err) console.log(err);
console.log("Server listening on PORT", PORT);
});