net.request 发布数据不起作用

Jay*_*Jay 5 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();
Run Code Online (Sandbox Code Playgroud)

Rob*_*sch 1

使用时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)}`)
})
Run Code Online (Sandbox Code Playgroud)

已更新 - 每条评论

您的代码应为(从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()
Run Code Online (Sandbox Code Playgroud)