javascript - 尝试 POST 时无法从请求正文获取对象的值 [Node.js、MySQL]

标签 javascript mysql node.js express request

我正在开发一个管理系统,当前正在为 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/

相关文章:

javascript - CSS 背景幻灯片太慢?

javascript - 如何在 Node.js 中转义双引号

Javascript - 正则表达式 Vimeo ID

mysql - 查找数据库中所有没有尾部斜杠的链接

mysql max函数使用

java - Hibernate 在几个选择查询或插入查询后挂起

node.js - 如何在网络服务器中的端口 80 而不是端口 5000 上运行 "Deployd"。

node.js - 具有基本身份验证的客户端 SSL POST 给出 DEPTH_ZERO_SELF_SIGNED_CERT 错误

Javascript 表单操作在使用 onsubmission 事件确认之前执行

javascript - 设置单选按钮在数据表中检查并使用数据库中的记录