为了避免同域AJAX问题,我希望我的node.js
Web服务器将所有请求从URL转发/api/BLABLA
到另一个服务器,例如other_domain.com:3000/BLABLA
,并透明地将与该远程服务器返回的相同的内容返回给用户。
所有其他网址(位于旁边/api/*
)均应直接提供,不能进行代理。
如何使用node.js + express.js实现此目的?您可以举一个简单的代码示例吗?
(Web服务器和远程3000
服务器都在我的控制下,都运行带有express.js的node.js)
到目前为止,我发现了这个https://github.com/http-party/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
});
});
但没有任何内容返回到原始Web服务器(或最终用户),因此没有运气。
您想用来http.request
创建与远程API类似的请求并返回其响应。
像这样:
const http = require('http');
// or use import http from 'http';
/* your app config here */
app.post('/api/BLABLA', (oreq, ores) => {
const options = {
// host to forward to
host: 'www.google.com',
// port to forward to
port: 80,
// path to forward to
path: '/api/BLABLA',
// request method
method: 'POST',
// headers to send
headers: oreq.headers,
};
const creq = http
.request(options, pres => {
// set encoding
pres.setEncoding('utf8');
// set http status code based on proxied response
ores.writeHead(pres.statusCode);
// wait for data
pres.on('data', chunk => {
ores.write(chunk);
});
pres.on('close', () => {
// closed, let's end client request as well
ores.end();
});
pres.on('end', () => {
// finished, let's finish client request as well
ores.end();
});
})
.on('error', e => {
// we got an error
console.log(e.message);
try {
// attempt to set error message and http status
ores.writeHead(500);
ores.write(e.message);
} catch (e) {
// ignore
}
ores.end();
});
creq.end();
});
注意:我还没有真正尝试过上面的html" target="_blank">方法,因此它可能包含解析错误,希望这会提示您如何使其工作。
我正在阅读Node和Express的Web开发这本书,遇到了一个障碍。 我被指示将下面的内容放在我的应用程序文件中,但它看起来像是已被弃用,无法工作。如何实现相同的功能? 这是我当前的代码:
Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用。Express 不对 node.js 已有的特性进行二次抽象,我们只是在它之上扩展了Web应用所需的功能。丰富的HTTP工具以及来自Connect框架的中间件随取随用,创建强健、友好的API变得快速又简单 示例代码: var express = require('express')va
问题内容: 我正在尝试让HTTPS在node.express.js上工作,但我无法弄清楚。 这是我的代码。 当我运行它时,它似乎仅响应HTTP请求。 我写了简单的基于香草的HTTPS应用程序: 当我运行此应用程序时,它 确实 响应HTTPS请求。请注意,我认为fs结果上的toString()并不重要,因为我使用了两者的组合,但仍然没有es bueno。 编辑添加: 对于生产系统,最好使用Nginx
问题内容: 我想将服务和子目录作为静态文件提供。索引文件应同时在和URL处提供。 我有 但是第二行显然可以处理整个,包括其中的所有文件(不只是and ),我不希望这样。 我也试过 但是访问基本URL 会导致对(双重组件)的请求,这当然会失败。 有任何想法吗? 顺便说一句,我在Express中找不到关于此主题的文档(+它的参数)…令人沮丧。也欢迎使用doc链接。 问题答案: 期望第一个参数是目录的
问题内容: 我需要帮助来了解Web应用程序的会话概念。我正在使用Express 3.0运行Node.js服务器。 我的目标是: 为每个登录的用户创建一个会话 存储此会话,并将其用于验证用户是否已登录(防止同时使用同一用户的两个设备)并限制对某些页面的访问(通过将会话ID与其他数据匹配) 我将使用MemoryStore保存会话(似乎最简单)。如果上述目标有意义,您能否提供有关如何实现这些目标的详尽解
问题内容: 我是Node.js的学习者。 什么是Express.js? Node.js的目的是什么? 为什么我们实际上需要Express.js?与Node.js一起使用对我们有用吗? 什么是Redis?Express.js附带吗? 问题答案: 这过于简化了,但是Express.js对Node.js来说就像Ruby on Rails 或Sinatra对Ruby一样。 Express 3.x是一种轻量