Node.JS等价于getContextPath,getServletPath?

我正在开发一个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语句检查匹配的上下文path,并将其路由到适当的模块。

现在模块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 } 

问题是,在路上,我将更新上下文path,所以用户将不得不去/somethingelse cats.jscats.js

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

将“上下文path”和“path信息”传递给cats.js的好方法是什么? 我正在考虑制作一些东西,并将其粘贴到req对象上,但是这肯定是一个普遍的问题,并且有一个普遍接受的正确的解决scheme?

你可以让cat.js导出一个函数,该函数接受一个patharg,并使用它来dynamic创build请求处理程序:

 module.exports = function(context){ return function (req, res) { var path = url.parse(req.url).pathname if(req.path == '/'+context+'/add') { //.... } //.... } } 

正如其他人提到的,Express.JS内置了这个function,并且是一个普遍接受的解决scheme,除了你可以自由的滚动。

Interesting Posts