Node.js找不到Axios正文请求参数

时间:2018-09-12 11:06:52

标签: node.js rest http axios

我有一个Node.js API,该API带有一个名称并给出422验证错误。

// 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发送了错误的请求?它适用于邮递员。

1 个答案:

答案 0 :(得分:0)

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

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

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

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