英文:
Sending Entire Req Body as JSON object in response
问题
我正在学习NodeJs,目前我刚刚制作了一个中间件函数,该函数将整个req对象作为json对象中的一个键值对的值发送(我知道这很长),但只是为了学习目的,我这样做了。
现在我知道req本身是一个对象,其值必须是一个字符串,所以我尝试将其转换:
这是我的代码
function prod (req, res) {
console.log("This is a body of Req :- ", req);
// const x = JSON.stringify(req); // 方法1 // 抛出“TypeError: Converting circular structure to JSON”错误
// const x = String(req) // 方法2 // 显示[object object]
// const x = req.toString() // 方法3 // 显示[object object]
res.status(200).json({"Request": `${x}`});
}
module.exports = prod
现在我按照顺序尝试了这3种方法,但都没有得到期望的结果。
方法1显示“TypeError: Converting circular structure to JSON”,而其他两种方法将其显示为“[object object]”。
然而,在console.log()
行中,整个req正确打印出来。请问有人能告诉我为什么在“响应”中不会发生这种情况,还有如何将整个req发送到“res”的json主体中?
英文:
I am learning NodeJs , currently I have just made a middleware function which will send the entire
req object as value of a single key-value pair in json object (I know it is very long ) , but just for learning purpose I did it.
Now I know that req is a object in itself and the value must be a string , so I tried to convert it :-
This is my code
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
Now I tried these 3 methods as mentioned one by one, but none of them gave desired result.
Method 1 shows TypeError: Converting circular structure to JSON
whereas other 2 methods displays it as [object object]
.
However in the console.log()
line , entire req is printed porperly. Can anyone please tell me why is it not happening in the response
& also how can I send the entire req
in json body of res
答案1
得分: 2
Express中的请求和响应对象不是简单的JSON对象,而是带有不可序列化方法的类。因此会出现“将循环结构转换为JSON”错误。
你可能需要的变量是req.body
,所以不要对请求本身进行字符串化,尝试使用JSON.stringify(req.body)
。这样应该就可以了。
还要记住,通常HTTP GET请求没有附加的消息体,所以如果你构建的路由是用于GET请求,它的消息体可能会是“undefined”。
英文:
The request and response objects in Express aren’t simple JSON objects like you expect; they’re classes with methods that aren’t serializable. Hence the “converting cyclical structure to JSON” error.
The variable you’re looking for is probably req.body
, so instead of stringifying the request itself, try JSON.stringify(req.body)
. That should do the trick.
Also keep in mind that HTTP GET requests don’t have bodies attached typically, so if the route you’re building is for a GET request it may come out as “undefined”.
答案2
得分: 1
Express.js express.json() 函数
express.json() 函数是Express中的一个内置中间件函数。它用于解析带有JSON数据的传入请求,并基于body-parser。
语法:
express.json([options])
您也可以使用 app.use(express.json());
这种方式。它会将请求中的数据解析为JSON格式。
示例
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);
});
英文:
Express.js express.json() Function
The express.json() function is a built-in middleware function in Express. It parses incoming requests with JSON payloads and is based on body-parser.
Syntax:
express.json( [options] )
You can also use app.use(express.json());
It is convert req.body values in json formate
Example
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);
});
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论