【问题标题】:NodeJS: How to set Mongoose response globally?NodeJS:如何全局设置 Mongoose 响应?
【发布时间】:2017-03-05 03:05:44
【问题描述】:

我有这种情况,我需要在路由器上全局设置猫鼬响应(例如动态站点名称)。我试过这个并且它有效,但我认为这不是最好的方法。我可以知道实现它的最佳方法是什么吗?

我当前的代码:

SomeSchema.findOne({}, function(err, callback) {
    router.get('/', function(req, res, next) {
        res.render('index', {
            title: 'Home'
        });
    });

    router.get('/page1', function(req, res, next) {
        res.render('page1', {
            title: 'Page 1'
        });
    });
});

【问题讨论】:

  • 如何全局设置一些对象?这只是定义了几条路线。我不明白你要解决什么问题?如果您希望我们评论您拥有的某些代码的可行性,您必须向我们展示实际代码,而不是实际上与手头问题没有任何关系的简化版本。
  • 嗨,我的意思是我的站点名称已保存到 mongodb。我想将站点名称重复到所有路线。这是最好的方法吗?还是有更好的方法?
  • 好吧,您不会显示从任何地方抓取网站名称,也不会显示您想用它做什么。我们可以猜测,但我们需要知道这两个是什么才能提出建议。请向我们展示您的实际代码,以说明您实际在做什么。我们在猜测或理论问题上做得不好。我们使用实际代码和实际问题描述工作得非常好。
  • 站点名称是否因一个请求而异,还是在服务器启动时固定?如果它不同,使用什么信息来确定它将是哪个站点名称?总共有多少个站点名称(我想弄清楚这里缓存或预加载是否合适)。一般来说,如果可以避免的话,您不希望对每条路由都进行额外的数据库查找。

标签: node.js mongodb mongoose


【解决方案1】:

您想要的是使用中间件。可以获取您需要的值并将其传递给每个请求的东西。

如果您只需要获取一次值,只需在服务器启动时调用它即可。否则,请参阅下面的中间件方法。

route.use(function(req, res, next) {
  //Runs on every request.
  SomeSchema.findOne({}, function(err, callback) {
    req.someValue = callback;
    next();
  });
})

router.get('/', function(req, res, next) {
  console.log(req.someValue); //My value is here
  res.render('index', {
    title: 'Home'
  });
});

router.get('/page1', function(req, res, next) {
console.log(req.someValue); //or here
  res.render('page1', {
    title: 'Page 1'
  });
});

【讨论】:

  • Np。 :) 不要忘记接受答案作为解决方案。我真的很感激。 :)
猜你喜欢
  • 2021-01-01
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多