Node.js https API 服务器,但静态文件使用 http

标签 node.js express

我正在使用 Node.js 为 iPhone 客户端创建一个 API 服务器。我还使用此 Node 服务器发回一些请求的文件,例如静态图像等。

现在我正在使用以下代码创建一个 https 服务器:

https.createServer(options,app).listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
});

效果很好。

但是,我希望通过 HTTP 而不是 HTTPS 提供静态文件。这可能吗?

我使用以下代码提供静态文件:

app.use(express.static(path.join(__dirname, 'uploads')));

谢谢!

最佳答案

如果您想在同一端口上执行此操作,这几乎与 Binding HTTP and HTTPS traffic on the SAME port in node.js? 重复。 。

但是,如果您有多个端口(一个用于 HTTP,一个用于 HTTPS),您可以尝试仅启动服务器的两个实例。创建两个应用程序(可以在同一个 Node 文件中完成),一个用于您的实际 API,然后另一个较小的应用程序(例如,staticApp)用于为您的静态内容提供服务。那么启动 API 服务器的代码是相同的,您只需使用

http.createServer(app).listen(app.get('port'), function(){
    console.log("Static server listening on port " + app.get('port'));
});

为了避免混淆,您还可以将 API 服务器中的“port”变量的名称更改为“ssl-port”之类的名称,这样就不会混淆。

这将有效地创建两个服务器;一个通过 HTTP 提供您的静态内容,并让您的原始 API 服务器通过 HTTPS 提供服务。只需确保您使用的是 80/443(标准),以便协议(protocol)隐式解释端口(即 http://mydomain.comhttps://mydomain.com 转到正确的位置),或者您的负载平衡器或任何代理您的流量正在将正确的协议(protocol)发送到正确的端口。

请注意,这会给任何尝试通过 HTTP 访问您的 API 的人返回 404(很可能)。解决方案可能是添加与您的 API 端点匹配的通用路由(例如 api/*,如果您的结构设置为这样的话),使用 https 协议(protocol)将用户重定向到相同的路径。

回复您的评论

两个将两个应用程序放在一个文件中,只需执行以下操作:

var api = express();

api.configure(function(){
    app.set('ssl_port', [your https port]);
    //your api code
});


var static = express();

static.configure(function () {
    app.set('port', [your http port]); // Set the port
    app.use(express.static(path.join(__dirname, 'static'))); //This will serve everything inside '/static' as static content
})

也创建两个服务器:

//HTTPS Api Server
https.createServer(https_options, app).listen(app.get('ssl_port'), function(){
  console.log("Api server listening on port " + app.get('ssl_port'));
});

//HTTP Static Server
http.createServer(static).listen(static.get('port'), function () {
    console.log('Static server listening on %s', static.get('port'));
});

关于Node.js https API 服务器,但静态文件使用 http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313274/

相关文章:

javascript - 如何在开发中运行多个 Node.js 应用程序

JavaScript - Node.js 错误 : Can't set headers after they are sent

express - 如何获得与错误响应相关的数据?

node.js - 捕获 "Failed to look up view"错误并提供 404

node.js - 了解 Node.js 中变量的范围

node.js - Node js中特定数据库操作后使用multer上传文件

javascript - Node.js 中的文件路径

node.js - 声明合并和别名不能一起工作

javascript - 带有express-generator的Nodejs应用程序,并尝试添加primus websocket

node.js - Expressjs随机挂起,如何输出错误?