尝试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 条评论
登录 后参与评论

相关文章

无法在router.post中获取主体,但可以使用app.post Node js / express

执行POST请求时无法在XMLHttpRequest的node.js版本上正确发送请求正文

在 Node.js 中使用 post 请求获取选中单选按钮的值

我尝试使用 await fetch 请求 body json 到 node js 主体为空

尝试将会话注入到Node.js中异步函数内的请求主体中

使用Node.js进行POST请求时,如何获取请求有效内容的内容长度?

尝试POST请求时出现节点js错误

如何将POST请求主体映射到各个字段(NODE.JS)

无法在Mysql&Express Node JS中转义限制值

Node.js:我怎样才能简单地使用express4获取请求主体?

node.js,表示如何在请求后从主体表单数据获取数据

Node.js mySQL 无法创建连接

Node js MySQL连接问题

Node JS MySQL等待结果

node.js MySQL性能

历史更新mysql node js

在 node.js 中获取请求对象数组

在node.js中,如何获取请求对象的协议?

尝试从JS对象获取密钥时出现typerror

Node.js 无法获得对 mongodb 的 post 请求

尝试通过Node.js中的元素索引将对象从数组导出到数组时,值未定义

尝试从Node.js获取信息SOAP时出错

尝试使用springboot从POST请求主体读取嵌套JSON时获取null

Node.js 在使用变量之前尝试使用 async/await 从 mysql select 中获取数据

node.js请求对象-返回响应主体以进行进一步操作

对Express.js的fetch()POST请求生成空主体{}

Node JS MySQL多线程是否比同步请求快

在node.js中使用请求模块时,POST请求状态代码(500)。Postman中的POST请求工作正常

JSON请求返回空主体Node.js