Node.JS是否等效于getContextPath、getServletPath?
我正在开发一个web服务器,它将为同一个域上的各种“web应用程序”加载各种模块 在下面的示例中Node.JS是否等效于getContextPath、getServletPath?,node.js,http,routing,contextpath,Node.js,Http,Routing,Contextpath,我正在开发一个web服务器,它将为同一个域上的各种“web应用程序”加载各种模块 在下面的示例中 createServer(function (req, res) { // crude request routing example var path = url.parse(req.url).pathname if(path.match(/^\/cats(?:\/|$)/)) require('./cats.js')(req, res) else if(path.match(
createServer(function (req, res) { // crude request routing example
var path = url.parse(req.url).pathname
if(path.match(/^\/cats(?:\/|$)/))
require('./cats.js')(req, res)
else if(path.match(/^\/dogs(?:\/|$)/))
require('./dogs.js')(req, res)
else
require('./404.js')(req, res)
})
if语句检查匹配的上下文路径,并将其路由到适当的模块
现在模块cats.js
如下所示:
module.exports = function (req, res) {
var path = url.parse(req.url).pathname
// HOW can I get context path and path info? What variables should I use?
if(req.path == '/cats/add') {
//....
} else if(req.path == '/cats/delete') {
//....
} else
// 404
}
问题是,接下来我将更新上下文路径,因此用户将不得不转到/somethingelse
而不是/cats
,才能访问cats.js
因此,cats.js不应该检查/cats/add
,而应该查找$CONTEXT/add
将“上下文路径”和“路径信息”传递到cats.js
的好方法是什么?我正在考虑制作一些东西并将其固定到req
对象上,但这肯定是一个常见问题,并且有一个普遍接受的正确解决方案?您可以让cat.js
导出一个函数,该函数采用路径arg并使用它动态创建请求处理程序:
module.exports = function(context){
return function (req, res) {
var path = url.parse(req.url).pathname
if(req.path == '/'+context+'/add') {
//....
}
//....
}
}
正如其他人所提到的,Express.JS内置了这种功能,是一种普遍接受的解决方案,除了您可以随意滚动之外 考虑express
模块。它实现了路由处理程序(连接式中间件)的概念,可以在任意上下文路径上挂载。最新版本4更进一步,允许像任何其他中间件一样装载复杂的路由器代码。express
不是我想在前端包含的东西,因为这会干扰我的“流程管理”和“http到stdio”模块。然而,我希望保持一致。如何在express中编写cats.js
,处理程序如何区分“上下文路径”和“路径信息”?不幸的是,express需要作为对http服务器的回调。不幸的是,你的要求完全在一个模块中实现了。更重要的是,在express服务器中,本身并没有上下文路径。对createServer的回调处理所有请求。这与J2EE这样的框架不同,在J2EE框架中,容器根据URL前缀决定哪个servlet获取哪个请求。tl;博士,你在写这个容器的等价物。要么使用express,要么像express那样做:我正在跟进。如果可能的话,我已经准备好在我的设置下将express包含在我的服务器中。我看到express使用上下文路径。