相关疑难解决方法(0)

使用express.js代理

为了避免同域AJAX问题,我希望我的node.js Web服务器将所有请求从URL转发/api/BLABLA到另一个服务器,例如other_domain.com:3000/BLABLA,并且透明地向用户返回该远程服务器返回的相同内容.

所有其他URL(旁边/api/*)将直接提供,不代理.

如何使用node.js + express.js实现此目的?你能给出一个简单的代码示例吗?

(Web服务器和远程3000服务器都在我的控制之下,都运行带有express.js的node.js)


到目前为止,我发现了这个https://github.com/nodejitsu/node-http-proxy/,但阅读那里的文档并没有让我更聪明.我结束了

var proxy = new httpProxy.RoutingProxy();
app.all("/api/*", function(req, res) {
    console.log("old request url " + req.url)
    req.url = '/' + req.url.split('/').slice(2).join('/'); // remove the '/api' part
    console.log("new request url " + req.url)
    proxy.proxyRequest(req, res, {
        host: "other_domain.com",
        port: 3000
    });
});
Run Code Online (Sandbox Code Playgroud)

但没有任何东西返回原始的Web服务器(或最终用户),所以没有运气.

proxy reverse-proxy node.js express

148
推荐指数
7
解决办法
12万
查看次数

节点请求 - 如何确定请求期间是否发生错误?

我正在尝试利用节点请求模块,但文档并不是那么好.如果我向有效资源发出请求并将其传递给Writable Stream,那么一切正常.但是,如果我向无效对象发出请求,则仍会创建可写流.例如,请使用以下代码段:

var x = request("http://localhost:3000/foo.jpg");
var st = fs.createWriteStream("foo.jpg");
x.pipe(st);
Run Code Online (Sandbox Code Playgroud)

如果服务器上存在foo.jpg资源,则数据将通过管道传输到流,并在服务器上创建文件.但是,如果服务器上不存在foo.jpg ,则仍会创建空白容器文件.似乎没有任何错误事件或任何可用于确定请求是否返回404的内容.我尝试过以下内容:

var x = request("http://localhost:3000/foo.jpg", function(err, response, body) {
    if(response.statusCode === 200) {
        // Success
        var st = fs.createWriteStream("foo.jpg");
        x.pipe(st);
    }
});
Run Code Online (Sandbox Code Playgroud)

并且:

request("http://localhost:3000/foo.jpg", function(err, response, body) {
    if(response.statusCode === 200) {
        // Success
        var x = response.request;
        var st = fs.createWriteStream("foo.jpg");
        x.pipe(st);
    }
});
Run Code Online (Sandbox Code Playgroud)

无济于事.这个想法非常简单; 我只想将URL标识的文件复制到本地服务器.如果请求无效(404等),请不要管道文件; 如果请求有效,则管道文件.有什么建议?

node.js

31
推荐指数
3
解决办法
1万
查看次数

节点代理 - 从基本http服务器代理SSL本地主机目标

我想做什么:

代理一个java api,它运行在https://127.0.0.1:443/api/我的UI上,运行在非SSL http://127.0.0.1:1337/上,以便绕过一些CORS问题.

我的尝试:

  1. 将SSL端口443上的api代理到我的非SSL开发端口1338.
  2. 将我的UI代理到1337
  3. 代理1137到:8080/index.html代理1338到:8080/api/
  4. 从localhost:8080访问我的应用程序

我的问题:

用户界面很好......但我无法点击API :8080/api/httpSession/init

是的,我仍然可以点击API https://localhost/api/httpSession/init

api.js - Renders index.html at:1337

var app = express();

app.all('*', function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

var options = {
  changeOrigin: true,
  target: {
      https: true
  }
};

httpProxy.createServer(443, '127.0.0.1', options).listen(1338);
Run Code Online (Sandbox Code Playgroud)

start.js - 将代号1337和1338转换为8080

// First I start my two servers
uiServer.start(); // renders index.html at 1337
apiServer.start(); // …
Run Code Online (Sandbox Code Playgroud)

ssl proxy node.js

6
推荐指数
1
解决办法
785
查看次数

标签 统计

node.js ×3

proxy ×2

express ×1

reverse-proxy ×1

ssl ×1