gpt4 book ai didi

javascript - 尝试使用正文解析器从 Express v4 中的 POST 请求解析 JSON 对象

转载 作者:行者123 更新时间:2023-11-30 15:16:32 25 4
gpt4 key购买 nike

我目前正在自学更多关于服务器代码的知识,特别是使用 Node.js 和 Express,我在接收和解析从 POST 请求发送的 JSON 对象时遇到了很多麻烦。我已经查看了许多其他帖子(链接到下面),但我终究无法弄清楚出了什么问题。这是我看过的:

Javascript:使用 AJAX 发送 JSON 对象 Javascript : Send JSON Object with Ajax?如何在 Express 应用程序中使用 JSON POST 数据 How do I consume the JSON POST data in an Express application使用 XMLHttpRequest 发送 POST 数据 Send POST data using XMLHttpRequest你如何在 Node.js 中提取 POST 数据? How do you extract POST data in Node.js?

所有这些都让我走上了正确的轨道,但我还没有完全走上正轨,因此正在寻求帮助。这是我正在使用的代码:

发送 POST 请求

var button = document.querySelector("#button");

button.onclick = function(){
console.log("Getting data from local server");

var xhr = new XMLHttpRequest();

xhr.open("POST", "http://localhost:3000/data/test.json", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(JSON.stringify({"latitude": 41.2418, "longitude": -70.8898}));
};

在服务器中处理 POST 请求

var http = require("http");
var fs = require("fs");
var express = require("express");
var app = express();
var path = require("path");
var bodyParser = require("body-parser");

var port = process.env.PORT || 3000;
//tells express where to find all the static files (HTML, CSS, etc) and load them into the browser
app.use(express.static(path.join(__dirname, '../client')));

//tells the application to use body-parser as middleware so it can handle post requests
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

//routing methods
//deal with incoming GET and POST requests to the server
app.get("/", function(req, res){
res.send("Submitted GET Request");
})

//only handles incoming POST requests to the test.json resource
app.post("/data/test.json", function(req, res){
console.info("Submitting POST Request to Server");
console.info("Request body: " + req.body);
//write the file
fs.writeFile(__dirname + "/../client/data/test.json", req.body,
function(err){
if(err){
console.error(err); //print out the error in case there is one
return res.status(500).json(err);
}

//resolve the request with the client
console.info("updated test.json");
res.send();
});
})

//tell the express object to create the server and listen on the port
app.listen(port);
console.log("Listening on localhost:" + port);

每当我尝试打印“req.body”的内容时,我都会得到“[object Object]”的输出。有什么想法吗?

编辑:我的问题已经解决了。我变了

console.info("Request body: " + req.body);

console.info("Request body: " + JSON.stringify(req.body));

我还将我的 POST XMLHTTPRequest 中的 Content-Type 更改为“application/json”以帮助格式化。

最佳答案

[object Object]" 是 JavaScript 的隐式 toString 操作的默认结果,它在尝试将该对象的字符串表示形式写入文件时使用它。

尝试将 JSON.stringify(req.data) 写入文件。

此外,在客户端 - 考虑更改您的 Content-Type header 以匹配:

xhr.setRequestHeader("Content-Type", "application/json");

关于javascript - 尝试使用正文解析器从 Express v4 中的 POST 请求解析 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44378391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com