Node.JS是否等效于getContextPath、getServletPath?

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(

我正在开发一个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(/^\/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使用上下文路径。