node.js:将URL从http重定向到https可以很好地处理除一个URL之外的所有URL

node.js:将URL从http重定向到https可以很好地处理除一个URL之外的所有URL,node.js,express,redirect,Node.js,Express,Redirect,我有我的证书和密钥,它们在我的站点上运行良好,现在我需要将我的URL从http重定向到https URL。我的http端口为5000,我的https端口为443,因此从http链接重定向如下:http://localhost:5000/signin到https链接它将是这样的https://localhost/signin 所以我创建了这段代码,在我所有的URL上都没有任何问题 功能要求TTPS(请求、回复、下一步){ 如果(!请求安全){ var domain=“https://”+req.h

我有我的证书和密钥,它们在我的站点上运行良好,现在我需要将我的URL从http重定向到https URL。我的http端口为5000,我的https端口为443,因此从http链接重定向如下:
http://localhost:5000/signin
到https链接它将是这样的
https://localhost/signin

所以我创建了这段代码,在我所有的URL上都没有任何问题

功能要求TTPS(请求、回复、下一步){
如果(!请求安全){
var domain=“https://”+req.hostname;
if(process.env[“SSL_端口”]){
domain=domain.replace(/:\d+$/,“”);
域+=“:”+process.env[“SSL_端口”];
}
//仅供参考,这对当地发展也有好处
返回res.redirect(域+请求url);
}
next();
}
应用程序使用(requireHTTPS);
除了此url:
http://localhost:5000/

它应该重定向到这样的内容:
https://localhost/

但它总是给我这样的结果:
https://localhost:5000/

它给了我这个错误

连接到localhost:5000时出错<代码>文件的结束错误

那么如何正确重定向呢

“/”路径

app.get('/',函数(req,res){
如果(请求用户===未定义){
res.render(“访问者索引”);
}否则{
res.redirect('/themainpage');
}
});

您的问题似乎出在这一行上:

domain = domain.replace(/:\d+$/, "");
此正则表达式匹配一个冒号加上字符串末尾的一个或多个数字。因此,以下措施将起作用:

http://localhost:5000
变为
http://localhost

但这不会:

http://localhost:5000/
变为
http://localhost:5000/

为什么??因为端口号不在字符串的末尾;“/”字符为

可以将正则表达式更改为以下内容:

domain = domain.replace(/:\d+[/]?$/, "");
这个正则表达式可以选择在字符串的末尾包含“/”


但这只会匹配没有路径的URL。您可以进一步扩展正则表达式以处理路径,但更好的解决方案是使用node.js解析URL并以安全的方式更改端口。

您的问题似乎在于这一行:

domain = domain.replace(/:\d+$/, "");
此正则表达式匹配一个冒号加上字符串末尾的一个或多个数字。因此,以下措施将起作用:

http://localhost:5000
变为
http://localhost

但这不会:

http://localhost:5000/
变为
http://localhost:5000/

为什么??因为端口号不在字符串的末尾;“/”字符为

可以将正则表达式更改为以下内容:

domain = domain.replace(/:\d+[/]?$/, "");
这个正则表达式可以选择在字符串的末尾包含“/”

但这只会匹配没有路径的URL。您可以进一步扩展regex以处理路径,但更好的解决方案是使用node.js解析URL并以安全的方式更改端口。

尝试:
domain.replace(/:\d+\/$/,“”)

尝试:
domain.replace(/:\d+\/$/,“”)

替换域=域后没有任何更改。替换(/:\d+$/,“”);使用domain=domain.replace(/:\d+[/]?$/,“”);替换domain=domain.replace(/:\d+$/,“”)后未发生任何更改;使用domain=domain.replace(/:\d+[/]?$/,“”);您应该使用反向代理(如nginx或apache)来处理证书和重定向您应该使用反向代理(如nginx或apache)来处理证书和重定向您能解释一下您的解决方案是如何工作的吗?正则表达式很难理解。你可以编辑你的答案,包括对你的方法的解释,这将很好地补充这个答案。你能解释一下你的解决方案是如何工作的吗?正则表达式很难理解。它将很好地补充这个答案,您可以编辑您的答案,包括对您的方法的解释。