【发布时间】:2026-01-26 20:15:01
【问题描述】:
我想将 example.org 和 cname.example.org 映射到两个不同的 node.js 应用程序。
但不要使用 nginx 等 http web 服务器。
而网络框架是express。
那么 express 或 node.js 中是否有任何中间件可以做到这一点?
【问题讨论】:
标签: node.js express url-routing
我想将 example.org 和 cname.example.org 映射到两个不同的 node.js 应用程序。
但不要使用 nginx 等 http web 服务器。
而网络框架是express。
那么 express 或 node.js 中是否有任何中间件可以做到这一点?
【问题讨论】:
标签: node.js express url-routing
Express 使用 connect,所以你可以这样做:
var express = require('express'),
app = express();
app.use(express.vhost('example.org', require('./exampleApp/')));
app.use(express.vhost('cname.example.org', require('./cnameExampleApp/')));
app.listen(80);
github上也有一个例子: https://github.com/visionmedia/express/tree/master/examples/vhost
这里是 connect.vhost 的参考: http://www.senchalabs.org/connect/vhost.html
编辑:在最近的 express 版本中,大多数中间件(如 vhost)不包括在内,因此您必须手动安装它们。
首先,运行:
$ npm install --save vhost
更新代码sn-p:
const express = require("express");
const vhost = require("vhost");
const app = express();
app.use(vhost("example.org", require("./exampleApp/")));
app.use(vhost("cname.example.org", require("./cnameExampleApp/")));
app.listen(80);
【讨论】:
如果您的 2 节点应用程序托管在同一主机上,则无论如何您都需要像 nginx 这样的代理。
var request = require('request');
var proxy = require('http').createServer(function (req, res) {
// distribute by request header 'host'
var targetHost = req.headers.host;
if (targetHost === 'example.org') {
req.pipe(request('http://your-node-app1' + req.url)).pipe(res);
} else if (targetHost === 'cname.example.org') {
req.pipe(request('http://your-node-app2' + req.url)).pipe(res);
} else { // not found or host is invalid
res.statusCode = 404;
res.end('host is not found!');
}
});
proxy.listen(80); // assume it listens to port 80
【讨论】: