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.js
到cats.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,除了你可以自由的滚动。