将url传递给模块

passing url to module

本文关键字:模块 url      更新时间:2023-09-26

我如何得到url进入模块?

module.exports = function(app, Reviews, Anon, User, url){
   var url = url;
  console.log("url", url)// url is undefined
  how to get url

  function postHandler(req, res){
  }

   app.post("/individual/"+ url + "/usefulness", postHandler)
};

在routes.js中调用

var usefulness = require("./usefulness")(app, Reviews, Anon, User, app.locals.url) 

尝试在routes.js中执行此操作

   app.use("/*", function(req, res, next){
        app.locals.url = req.path;
        next()
    })

编辑:我也尝试做app.set("url", app.locals.url)在路由。js和做var url = app.get("url")在有用的。js

如果我不在路由的处理程序中访问app.locals,那么我可能无法访问它。

你看我不能做像var usefulness = require("./usefulness")(app, Reviews, Anon, User, req.path)这样的东西也许如果我能做一些这样的东西会有帮助

由于url的值是在请求之后设置的,因此可以执行以下操作

module.exports = function (app, Reviews, Anon, User) {
  return function (url) {
    app.post("/individual/"+ url + "/usefulness", function () {})
  }
}

然后在routes.js

var usefulness = require("./usefulness")(app, Reviews, Anon, User) 
// ...
app.use("/*", function(req, res, next){
   app.locals.url = req.path
   usefulness(apps.locals.url)
   next()
})

不知道你为什么要在评论、匿名和用户上创建一个闭包

通过app.use定义的快速中间件在到达与模式/*匹配的路由之前不执行。当脚本运行时,require("./usefulness")函数接受一个未定义的app.locals.url作为参数。

用有效的app.locals.url参数定义usefulness的唯一方法是将require行移动到回调中:

var usefulness;
app.use("/*", function(req, res, next){
    app.locals.url = req.path;
    usefulness = require("./usefulness")(app, Reviews, Anon, User, app.locals.url) 
    next();
})

仍然需要在定义usefulnessapp.locals.url之前到达一个匹配/*的端点,但是app.local .url将在应用程序的生命周期内保留这个req.path值。

希望有帮助!