作为响应,将整个请求正文作为JSON对象发送



我正在学习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);
});

最新更新