Node.js请求与“请求”模块一起使用,而不与“ axios”一起使用

时间:2019-10-20 08:37:15

标签: javascript node.js axios

我正在尝试使用axios向服务器发出请求。问题是我的请求可以在请求模块上正常运行,而不能与axios一起运行。我的代码看起来像这样:

const axios = require('axios');

axios.post('https://mydomain/api/login', {
  username: 'test@gmail.com', 
  password: '123'
})
.then(function (response) {
  console.log(response.data);
})
.catch(function (error) {
  console.log(error);
});

服务器提供的答案是:

{ response: 'Error', error_message: 'Invalid credentials' } 

我使用相同的凭据但使用请求模块发出了相同的请求,并且效果很好。

var request = require("request");

var options = { 

  method: 'POST',
  url: 'https://mydomain/api/login',
  formData: { username: 'test@gmail.com', 
              password: '123' } };

request(options, function (error, response, body) {
  if (error) throw new Error(error);

  console.log(body);
});

服务器的响应是:

{"response": "Successfully authenticated.", "email": "test@gmail.com",}

我想念什么吗?

3 个答案:

答案 0 :(得分:1)

检查您的请求标头中是否有Content-Type

您可能需要为POST请求标头Content-Type设置axios配置。这意味着标题应该是:

Content-Type: application/json

这是Axios的一个已知问题,如本博文所述: Axios vs Request

答案 1 :(得分:1)

您正在使用axios在体内发送功劳

axios.post('https:mydomain/api/login', {
  username: 'test@gmail.com', 
  password: '123'
})

,但是使用请求模块,您将其与formData发送:

var options = { 

  method: 'POST',
  url: 'https:mydomain/api/login',
  formData: { username: 'test@gmail.com', 
              password: '123' } };

答案 2 :(得分:0)

我找到了解决方法:

const axios = require('axios');
var querystring = require('querystring');
axios.post('https://mydomain/api/login', querystring.stringify({username: 'test@gmail.com', password: '123' }))
.then(function (response) {
  console.log(response);
})
.catch(function (error) {
  console.log(error);
});