Node.JS equivelant to getContextPath,getServletPath?

时间:2015-03-02 04:23:11

标签: node.js http routing contextpath

我正在开发一个网络服务器,它将在同一个域上为各种“网络应用程序”加载各种模块。

在以下示例中,

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
}

问题在于,我将更新上下文路径,因此用户必须转到/cats而不是/somethingelse而不是cats.js

因此,cats.js不应检查/cats/add,而应查找$CONTEXT/add

将“上下文路径”和“路径信息”传递给cats.js的好方法是什么?我正在考虑制作一些内容并将其添加到req对象上,但这肯定是一个常见的问题,并且有一个普遍接受的正确解决方案?

1 个答案:

答案 0 :(得分:1)

你可以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内置了这种功能,并且是一种普遍接受的解决方案,除了您可以根据需要自由滚动。