使Node.js中的http.request适用于浏览器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使Node.js中的http.request适用于浏览器相关的知识,希望对你有一定的参考价值。

我想编写一个与Node.jsbrowser兼容的代码库插件。我在Node.js中编写基本代码,然后使用节点模块browserify将其转换为支持浏览器版本。当我在GET中执行代码时,我所有的POSTNode.js请求都能正常工作。如果我写ajax请求,它适用于浏览器。我正在使用http节点模块向远程服务器发出请求。如何在不编写任何单独的ajax请求的情况下使远程服务器请求在浏览器版本中工作?主要思想是保持相同的代码库并使其以两种方式工作。我有以下用Node.js编写的示例代码

var http = require('http');

function Test() {
    var self = this;
}

Test.prototype.get_data = function() {
    var fetch = http.request("http://stackoverflow.com/", function(res) {
        var result = ""
        res.on('data', function(chunk) {
            result += chunk;
        });
        res.on('data', function(chunk) {
            console.log("response.................");
            console.log(result);
        });
    });
    fetch.on('error', function(e) {
        console.log("error..........");
        console.log(e);
    });
    fetch.end();
    return 'hello world'
};

API = new Test();

module.exports = API;

现在当我通过调用Node.jsAPI.get_data()中执行代码时,它对我来说很好。但是在我使用browserify转换代码然后通过htmlAPI.get_data()文件调用后,当我在chrome中运行时,我得到以下错误XMLHttpRequest cannot load http://stackoverflow.com/. Origin http://localhost is not allowed by Access-Control-Allow-Origin.。任何想法如何使相同的Node.js代码库工作而无需为浏览器编写jsonp ajax。下面提到的是我在Mozilla中运行时的标题。

Response Headers
Cache-Control   public, max-age=21
Content-Encoding    gzip
Content-Length  36325
Content-Type    text/html; charset=utf-8
Date    Tue, 27 May 2014 20:03:47 GMT
Expires Tue, 27 May 2014 20:04:10 GMT
Last-Modified   Tue, 27 May 2014 20:03:10 GMT
Vary    *
X-Frame-Options SAMEORIGIN

Request Headers
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection  keep-alive
Cookie  __qca=P0-1262336656-1387719953106; __utma=140029553.331521903.1387719953.1389033371.1389035323.13; __utmz=140029553.1389035323.13.13.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); prov=3d930d0c-1785-4421-b319-33036243183e; _ga=GA1.2.331521903.1387719953
Host    stackoverflow.com
Origin  http://127.0.0.1
Referer http://127.0.0.1/index.html
User-Agent  Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0

2 requests

51.2 KB
答案

browserify已经有了http module for the browser,但你不需要做任何特别的事情来获得它。这是浏览器化使用require('http')的脚本时在浏览器中自动使用的内容

试试这个CORS错误问题:

var fetch = http.request({
  host: "stackoverflow.com",
  port: 80,
  path: "/",
  method: "GET",
  withCredentials: false // this is the important part
}, function(res) {
    var result = ""
    res.on('data', function(chunk) {
        result += chunk;
    });
    res.on('end', function() {
        console.log("response.................");
        console.log(result);
    });
});
另一答案

您无法从Chrome上的本地主机访问该类型的URL位置,它被标记为CORS安全风险。您可以尝试的一些事项是:1。将页面上传到托管域,然后您可以尝试从www.yourdomain.com而不是本地主机。尝试在请求中使用https而不是http。

以上是关于使Node.js中的http.request适用于浏览器的主要内容,如果未能解决你的问题,请参考以下文章

Node.js中的http.request方法的使用说明

如何使用 node.js 使 Websocket 服务器安全

适用于 Node.js 的 MySQL 驱动程序适用于 Windows?

如何使用适用于 Node.js 的 AWS 开发工具包将 Amazon S3 中的所有对象从一个前缀复制/移动到另一个前缀

使用适用于 Node.js 的 AWS 开发工具包将二进制文件上传到 S3

适用于 Amazon SES 的 Node.js 模块 [关闭]