我正在开发一个管理系统,当前正在为 api 创建 POST 请求。我需要请求正文的值才能在数据库中发布新城市。这些值在存储过程中用作参数。我得到的不是我输入的键值,而是“未定义”值,有时是“[object Object]”。
我正在使用 MySQL 服务器,由 Google 服务托管在云中。后端使用 Node.js 制作,路由使用 Express。我修复该错误的尝试都没有效果。
到目前为止我已经尝试过:
-从正文中解析每个键的值.toString()和JSON.stingfify()
-将正文转换为 Json/字符串,然后再转换回 JavaScript 对象
-获取响应请求的正文 (res.req.body)
-获取数组中主体的响应值,然后将下一个元素作为参数传递给存储过程后推送
-使用“request”npm 扩展来放置调用 POST 方法时所需的值。
-更改了存储在 URL 参数而不是正文中的值。
-以表单数据、JSON 文件、HTML 页面的形式发送正文的值
cityController.js 中的 Controller 方法:
exports.city_post = (req, res, next)=>{
poolDb.getConnection(function (err, connection){
if(!err) {
const sql = 'CALL createNewCity(?,?)';
var zipReq = req.params.zip;
var nameReq = req.params.name;
var reqBody = JSON.stringify(req.res.body);
connection.query(sql,[zipReq,nameReq], (err,rows)=>{
if(!err){
return res.status(201).json({Message: 'City with name: '+nameReq+' and zip code: '+zipReq+' created successfully\n', rows});
}
else{
return res.status(404).json({errorMessage: err})
}
});
}
else{
return res.status(500).json({errorMessage: "server error: "+this.err});
}
console.log("\nZip Code: "+ zipReq +"\nName: " + nameReq); //for testing
console.log("\nrequest body: " + reqBody); //for testing
});
}
城市路线:
const express = require('express');
const router = express.Router();
const CityController = require('../controllers/cityController.js');
router.get('/', CityController.city_getAll);
router.get('/:cityzip', CityController.city_getbyzip);
router.post('/add', CityController.city_post);
...
module.exports = router;
预期:在表城市中发布新字段,状态代码 (201)。
实际:状态代码 (404),数据库中没有新插入。 body、req.body.zip 和 req.body.name 的值为“未定义”。
截图:
-终端输出:/image/l3V24.jpg
- postman 请求:/image/05w4N.jpg
最佳答案
Express 默认情况下不解析帖子正文(出于某种原因)。你可以尝试流行的 body-parser npm 包,或者如果你不想添加一个全新的包,你可以自己收集原始主体数据并从字符串中解析。这里是 express 应用程序:
app.use(function(req, res, next){
var data = "";
req.on('data', function(chunk){ data += chunk})
req.on('end', function(){
req.rawBody = data;
var json = JSON.parse(req.rawBody); // assuming valid json. ideally check content-type first
next();
});
});
关于javascript - 尝试 POST 时无法从请求正文获取对象的值 [Node.js、MySQL],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57624802/