尝试POST时无法从请求主体获取对象的值[Node.js,MySQL]

亚历山德罗夫

我正在管理系统上,当前正在为api创建POST请求。我需要请求正文的值才能在数据库中发布新城市。这些值在存储过程中用作参数。代替我输入的键值,我得到的是“未定义”值,有时是“ [对象对象]”。

我正在使用由Google服务托管在云中的MySQL服务器。后端是由Node.js构成的,而Express是由路由的。我修复该bug的尝试都没有对我有用。

到目前为止,我已经尝试过:

-从主体解析每个键的值.toString()和JSON.stingfify()

-将主体转换为Json / string,然后返回到javascript对象

-获取响应的请求的正文(res.req.body)

-在数组中获取主体的响应值,然后在将下一个元素作为参数传递给存储过程后推入下一个元素

-在调用POST方法时,使用“ request” 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),数据库中没有新插入。正文,req.body.zip和req.body.name的值为“未定义”。

屏幕截图:

-终端输出:https : //imgur.com/a/brqKZlP

-邮递员请求:https ://imgur.com/a/ZfFcX8Z

亚历山德罗夫

好的,从标头传递变量信息不是一个好习惯。

我设置了中间件bodyParser,以便它接受json数据,还为urlencoded扩展提供了一个假值。

现在它可以正常工作,所有HTTP请求都像超级按钮一样执行,将我需要的信息传递到正文中,而不是标题中-正确的方式。

所以我只是在app.js文件中添加了它:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));

另外,在邮递员或任何其他测试环境中,请确保选择x-www-form-urlencodedform data选择raw用于正文。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章