我正在尝试使用此软件包https://www.npmjs.com/package/request来发布数据并等待响应,然后发布更多数据。但是我总是将body / msg设为未定义,并且由于某些原因该代码无法正常工作。
我在浏览器中有以下代码:
Unable to resolbe 'dataset.mnist'. IntelliSense may be missing for this module.
在这里,我得到的消息是$.ajax("/login",{ /// here i am in https://255.255.255 /// I am obscuring the real host ip
data:{
username:"username",
password: "password",
autologin:"true"},
method:"POST"
}).done(function(msg) {
console.log( msg );
/// another $.ajax request here
});
,并且被重定向。这可行。
但是,在node.js中,这不是:
{success: true, redirectTo: "https://255.255.255"}
身体和味精,我都空了。 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); })
返回null
console.log(err)
基于会话,仅支持/login
。两者似乎都在发送相同类型的数据,所有内容都相同。我在那里没有什么错:/
我将不胜感激。 预先感谢
编辑:
因此,我尝试使用适当的回调参数,但出现此错误:application/x-www-form-urlencoded
然后我尝试使用标头来模拟浏览器,但仍然出现该错误。
403
答案 0 :(得分:1)
回调的格式为(err,response,body);也许那就是为什么你得到一个空洞的身体和反应。 You can refer here for details.
答案 1 :(得分:1)
我认为您对Promise和非Promise请求包感到困惑。按照您的示例, //Program to sort a linked list using selection sort.
#include<stdio.h>
#include<time.h>
#include<cstdlib>
#define size 10 //Size of linked list.
struct node
{
int info;
struct node *next;
}*start=NULL;
typedef struct node * Node;
int main()
{
int i;
Node ptr;
void selectionsort(Node);
srand(time(NULL));
for(i=0;i<size;i++)
{
Node ptr,temp;
ptr=(Node)malloc(sizeof(node));
ptr->info=rand()%100; //Random linked list of given size is created.
ptr->next=NULL;
if(start==NULL)
{
start=ptr;
}
else
{ temp=start;
while(temp->next!=NULL)
temp=temp->next;
temp->next=ptr;
}
}
printf(" Linked List Before Sorting Is -\n");
ptr=start;
while(ptr!=NULL)
{
printf(" %d ",ptr->info);
ptr=ptr->next;
}
printf("\n Linked List After Sorting Is -\n");
selectionsort(start);
ptr=start;
while(ptr!=NULL)
{
printf(" %d ",ptr->info);
ptr=ptr->next;
}
return 0;
}
void selectionsort(Node start)
{
Node ptr=start,temp,address;
int var;
while(ptr->next!=NULL)
{
temp=ptr;
address=temp;
while(temp!=NULL)
{
if((address->info)>(temp->info))
address=temp;
temp=temp->next;
}
var=address->info;
address->info=ptr->info;
ptr->info=var;
ptr=ptr->next;
}
}
返回Promiseified响应,您可以直接从ajax请求的响应中获取数据。您期望$ajax
软件包也应该直接为您提供数据,这是不正确的。
实际上,您可以通过两种方式解决问题:
Sol。 1: 使用适当的回调函数参数,您必须在回调函数的第三个参数中获取数据。如:
request
Sol。 2:
使用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);
});
NPM程序包(从here下载)并获得正确的响应。例如:
request-promise
以上实现将为被调用的方法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);
})
}
返回一个Promise。
注意::如果getData()
JSON对象中使用了const response = await request(options);
,则语句resolveWithFullResponse: true,
将返回整个响应对象。如果仅需要响应正文或数据,请不要在选项中提及options
属性,也不要为其分配值resolveWithFullResponse
。默认情况下,false
的值为false。