【问题标题】:How to response XMLHttpRequest in node.js如何在 node.js 中响应 XMLHttpRequest
【发布时间】:2016-11-29 14:51:08
【问题描述】:

通过 XMLHttpRequest,我用

发送一些数据
 const xhr = new XMLHttpRequest()

  xhr.onreadystatechange = function (event) {
    if (xhr.readyState === 4 /** responseText is not available yet */) {
      const statusCode = xhr.status
      const responseText = xhr.responseText
      // some callback functions
    }
  }
  xhr.open('POST', url, true /** async */)
  xhr.setRequestHeader('Content-Type', 'text/plain')
  xhr.withCredentials = true 
  xhr.timeout = timeoutMillis 
  xhr.ontimeout = function (event) {
    // some time out error log
  }
  xhr.send(JSON.stringify(payloads))

和服务器端node.js服务器代码是

   var httpPort = 3001
var http = require('http')
   ,qs = require('querystring');
http.createServer(function (req, res) {
        console.log(req.url + " "  + req.method);
   if( req.url == '/mytoken' && req.method == 'POST'){
        console.log('start');
        var body = [];
        res.writeHead(200, {'Content-Type':'text/plain'});
        req.on('data', function(chunk){
                body.push(chunk);
                console.log('GOT DATA: ' + body);
        });
        res.end('OK');
   }else{
        res.writeHead(404, {'Content-Type': 'text/plain'});
        res.end('404 ERROR');
   }
}).listen(httpPort);

我写了这样的服务器代码。但是,服务器没有发送任何响应。

它应该是 statusCode 200 和 responseText 'OK'。

我错过了一些?还是做错了?

编辑 1:编辑服务器代码并读取发送给我的数据

【问题讨论】:

  • 第一行的结果是什么console.log(req.url + req.method);
  • console.log() 只通知控制台/终端。使用res.write() 将信息发送到HTTP 客户端。另外,请注意时间——事件不会立即发生,因此您可能会在req 实际提供任何'data' 之前结束res。同时收听'end' event
  • @reza /mytoken POST
  • @JonathanLonowski 我写的像 res.writeHead(200, {'Content-Type':'textplain'}); res.end('OK');不是说xhr可以让xhr.statusCode为200,xhr.responseText为'OK'吗?
  • @pebC 是的。一旦 XHR 的readyState === 4(即请求“完成”),它的statusCoderesponseText 应该是200'OK'。这不是你看到的结果吗?如果不是,结果如何?您如何验证它们?

标签: javascript node.js xmlhttprequest


【解决方案1】:

在某些情况下,它需要在响应头上放置额外的权限信息:

res.writeHead(200,{
    "Content-Type": "text/plain",
    "Access-Control-Allow-Origin": "*" // Allow access from other domains
});
res.write('Hello From Server   O w O !');
res.end();

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 2011-12-24
    • 1970-01-01
    • 2011-03-03
    • 2011-08-10
    • 2019-09-28
    相关资源
    最近更新 更多