gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:40 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com