【问题标题】:Node.js not finding Axios body request paramsNode.js 没有找到 Axios 正文请求参数
【发布时间】:2019-02-17 00:10:52
【问题描述】:

我有一个接受名称并给出 422 验证错误的 Node.js API。

// Express is setup with bodyParser:
const bodyParser = require('body-parser');
const app = express()
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors());
app.use(express.static('files'))

...

// API:
app.post('/test',
[
  body('name').exists(),
],
async (req, res, next) => {
  try{ 
    const errors = validationResult(req);
    if(!errors.isEmpty()){
      return res.status(422).json({ errors: errors.array() });
    }

    return res.status(200).send('Your name is ' + req.body.name);

  }catch(error){
    return res.status(422).json({ errors: errors.array() });
  }
}

我通过 Axios 访问它:

const rb = {
  name : 'John', 
} 

const config = {
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  params: {
    name : 'John'
  }
}

axios.post(url, rb, config)
.then((result) => {
  callback('Success', result);
})
.catch((err) => {
  callback('Oops!', err);
});

我正在返回第一个 422,我的“名称”参数没有被 Node.js 解析。它不在 req.body 中

我是否通过 Axios 发送了错误的请求?它适用于邮递员。

【问题讨论】:

    标签: node.js rest http axios


    【解决方案1】:

    rb 应该是作为请求体传递的对象:

    axios.post(url, { name : 'John' }, config)
    

    params 配置选项用于传递查询/URL 参数(可通过req.query 访问)。

    鉴于它可以在 Postman 中运行,我假设您的 Express 服务器正在使用正确的正文解析器 (express.urlencoded)。

    【讨论】:

    • 我也试过上面的编辑代码,我得到相同的validationResult错误
    • 他们在 req.query,而不是 req.body!说得通!感谢您的提示
    • 这实际上是不正确的。他们在req.query 中的原因是因为您在config 中设置了params,但这不是它应该如何工作的。您是否尝试过完全删除 params
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多