net.request发布数据不起作用

时间:2017-06-09 19:43:29

标签: javascript node.js electron

使用net.request发布数据无效。它到达了URL。但数据未公布。我的代码如下。请帮帮我。

const net = remote.net;
const querystring = require('querystring');

//**
var postData = querystring.stringify({
    'username' : 'test',
    'password': 'test'
});

const request = net.request({
  method: 'POST',
  url: 'http://127.0.0.1/post.php',
});

request.on('error', (error) => {});

request.on('response', (response) => {});


request.write(postData);
request.end();

2 个答案:

答案 0 :(得分:1)

我知道已经有一段时间了。但是对于下一个会有同样问题的人。

别忘了您必须在标头中声明“ postData”的大小。 例如:

var postData = JSON.stringify({"q" : sqlQuery });
const request = net.request({
        method: 'POST',
        protocol: 'http:',
        hostname: '127.0.0.1',
        port: 3000,
        path: '/select',
        headers: {
          'Content-Type': 'application/json',
          'Content-Length': postData.length
        }
       }) 
request.on('response', (response) => {
.... // Sommething
})
request.write(postData)
request.end()


答案 1 :(得分:0)

使用net.request时,您需要在编写数据后致电request.end()以确保已发送请求数据。

您需要致电request.end()的原因是允许在您实际申请之前对请求的标题和正文进行更改。

request()将连接并等待request.end()一次性发送标题和正文。

此外,如果您想了解代码的作用,忽略响应绝不是一个好主意。

你真的应该挂钩request.response事件,看看发生了什么错误,如:

request.on('response', (response) => {
  console.log(`STATUS: ${response.statusCode}`)
  console.log(`HEADERS: ${JSON.stringify(response.headers)}`)
})

更新 - 每条评论

您的代码应该阅读(从Electron API文档中net的示例代码扩展):

const request = net.request({
  method: 'POST',
  url: 'http://127.0.0.1/post.php',
})

let body = ''

request.on('response', (response) => {

  // check response.statusCode to determine if the request succeeded
  console.log(`STATUS: ${response.statusCode}`)
  console.log(`HEADERS: ${JSON.stringify(response.headers)}`)

  // capture body of response 
  // - can be called more than once for large result
  response.on('data', (chunk) => {
    console.log(`BODY: ${chunk}`)
    body += chunk.toString()
  })

  // when response is complete, print body
  response.on('end', () => {
    console.log(`BODY: ${body}`)
  })
})

request.write(postData)

request.end()