Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – 是否可以为NodeJS应用程序设置基本URL?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望能够在同一个域下托管多个NodeJS应用,而不使用子域(例如google.com/reader而不是images.google.com)。问题是,我总是键入URL的第一部分,例如。 “/ reader”在Express / NodeJS中。

如何设置Express应用程序,以使基本URL为something.com/myapp?

所以,而不是:

app.get("/myapp",function (req,res) {
   // can be accessed from something.com/myapp
});

我可以:

// Some set-up
app.base = "/myapp"

app.get("/",res) {
   // can still be accessed from something.com/myapp
});

我也想配置Connect的staticProvider行为相同的方式(现在,它认为提供静态文件到something.com/js或something.com/css而不是something.com/myapp/js)

解决方法

目前这不是被支持,并且它不容易添加它自己。

整个路由东西被埋在服务器代码深处,作为奖励,没有暴露他们自己的路由。

我挖通过源,并检查了最新版本的Express和Connect中间件,但仍然没有这种功能支持,你应该在ConnectExpress本身打开一个问题。

与此同时…

自己修补这个东西,这里是一个快速和简单的方法,只有一行代码改变。

在〜/ .local / lib / node / .npm / express / 1.0.0 / package / lib / express / servers.js中,搜索

// Generate the route
this.routes[method](path,fn);

这应该在357行左右,替换为:

// Generate the route
this.routes[method](((self.setTings.base || '') + path),fn);

现在只要添加设置:

app.set('base','/myapp');

这工作正常的路径是纯字符串,对于RegEx支持,你必须自己在路由器中间件,在这种情况下更好地提出问题。

对于静态提供者,只需在设置时添加/ mypapp即可。

更新

使它与RegExp一起工作:

// replace
this.routes[method](baseRoute(self.setTings.base || '',path),fn);

// Helper
function baseRoute(base,path) {
    if (path instanceof RegExp) {
        var exp = RegExp(path).toString().slice(1,-1);
        return new RegExp(exp[0] === '^' ? '^' + base + exp.subString(1) : base + exp);

    } else {
        return (base || '') + path;
    }
}

我只用一些表达式测试这个,所以这不是100%测试,但在理论上它应该工作。

更新2

提交补丁的问题:
https://github.com/visionmedia/express/issues/issue/478

大佬总结

以上是大佬教程为你收集整理的node.js – 是否可以为NodeJS应用程序设置基本URL?全部内容,希望文章能够帮你解决node.js – 是否可以为NodeJS应用程序设置基本URL?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。