我试图使用requestjs包发布数据并等待响应。但我对身体的反应总是不明确。
var request = require('request');
request({
method: "POST",
baseUrl: "https://255.255.255",
uri: "/login",
form: {
username: "username",
password: "password",
autologin: "true"}},
function(body, msg, err){
console.log(body); console.log(msg);
})编辑:同样,未定义的主体是由隐私策略造成的。
发布于 2019-01-02 19:20:19
我想你被“承诺”和“不承诺”请求包搞混了。正如您的示例所示,$ajax返回Promiseified,直接从ajax请求的响应中获取数据。您期望request包也会直接提供数据,这是不正确的。
实际上,你可以用两种方式解决你的问题:
Sol.1:使用适当的回调函数参数,您必须在回调函数的第三个参数中获取数据。例如:
var request = require('request');
request({
method: "POST",
baseUrl: "https://255.255.255",
uri: "/login",
form: {
username: "username",
password: "password",
autologin: "true"
}
},
function (error, httpResponse, body) {
if (error) {
console.error(error);
}
console.log(httpResponse.statusCode);
console.log(body);
});Sol.2:使用request-promise NPM包(从这里下载)并获得pomisified。例如:
var request = require('request-promise');
const getData = async () => {
return new Promise((resolve, reject) => {
const options = {
method: "POST",
baseUrl: "https://255.255.255",
uri: "/login",
form: {
username: "username",
password: "password",
autologin: "true",
resolveWithFullResponse: true, // Returns full response. To get only data don't use this property or mark it false.
}
};
// Get whole Response object.
const response = await request(options);
// Returns the Promise.Resolve or Reject based on response.
if (response.statusCode < 200 || response.statusCode > 300) {
const errorMsg = 'Error occurred while POSTing the request. Got status: ' + response.status;
console.error(errorMsg);
// Reject the promise. Should be caught.
return reject(errorMsg);
}
const responseBody = response.body;
console.log(responseBody);
// Return the response.
return resolve(responseBody);
})
}上面的实现将返回正在调用的方法getData()的承诺。
注意:如果在 JSON对象中使用resolveWithFullResponse: true,,语句const response = await request(options);将返回完整的响应对象。如果只需要响应体或数据,则不要在选项中提及resolveWithFullResponse属性,也不要向其分配值false。默认情况下,resolveWithFullResponse的值为false。
发布于 2019-01-02 18:48:19
回调的格式是(err,response,body);也许这就是为什么您要得到一个空的主体和响应。你可以参考这里的细节。
https://stackoverflow.com/questions/54011397
复制相似问题