Node.js HTTP请求返回正文/消息为空

时间:2019-01-02 18:30:57

标签: javascript jquery node.js ajax http

我正在尝试使用此软件包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

2 个答案:

答案 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。