【发布时间】:2019-12-28 16:34:58
【问题描述】:
我正在开发一个管理系统,目前正在为 api 创建 POST 请求。我需要请求正文的值才能在数据库中发布一个新城市。这些值在存储过程中用作参数。我得到的不是我输入的键值,而是一个“未定义”的值,有时是一个“[object Object]”。
我正在使用由 Google 服务托管在云中的 MySQL 服务器。后端使用 Node.js 制作,使用 Express 进行路由。我修复错误的尝试都没有为我工作。
到目前为止我已经尝试过:
-从正文中解析每个键的值 .toString() 和 JSON.stingfify()
-将正文转换为 Json/string,然后返回 javascript 对象
-获取响应的请求正文(res.req.body)
-在数组中获取主体的响应值,然后在将下一个元素作为参数传递给存储过程后推送它
-在调用 POST 方法时使用“请求”npm 扩展来放置我需要的值。
-更改了要存储在 URL 参数中而不是正文中的值。
-将正文的值作为表单数据、JSON 文件、HTML 页面发送
cityController.js 中的控制器方法:
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 的值是“未定义”。
截图:
-终端输出:https://imgur.com/a/brqKZlP
-邮递员请求:https://imgur.com/a/ZfFcX8Z
【问题讨论】:
-
尝试 console.loging 出 req.params/req.query 属性以查看它们包含的内容(如果有)。可能以意想不到的方式格式化,尤其是收到“[object Object]”。
标签: javascript mysql node.js express request