将变量发送到exressjs中的所有路由

时间:2016-04-19 02:13:03

标签: node.js express

使用nodejs / expressjs为我的网络应用程序构建API,我想向所有API发送一些变量,例如网站标题和描述等。

我偶然发现使用不再使用的dynamicHelper()的旧解决方案。这样做的新方法是什么?

3 个答案:

答案 0 :(得分:2)

最简单的事情就是放入一些中间件,将它作为本地人附加到响应对象(这些中间件会自动显示在你的视图中)。类似的东西:

app.use(function(req,res,next) {
   res.locals = {
     title : 'your title',
     description : 'your description'
   };
   return next();
});

**编辑以说明API端点必须执行的操作 由于每个端点可能对其自己的对象负责,因此您还可以执行以下操作:

app.get('/whatever', function(req,res){
   var json = {}; 
    // do whatever to build your json
   json.metadata = res.locals; // or whatever the common stuff is
   res.send(json);
}

这样可以保留所有常见的'在json响应的一部分中的东西。

答案 1 :(得分:1)

既然你提到你没有在expressjs中使用任何视图引擎,我假设你只是依靠angularJS来做客户端redering。您可以将这些服务器端数据传递给http标头,然后从客户端读取它们。为此,您可以在路由器中执行此操作,

app.use(function(req,res,next) {
    res.set({
      'title': 'my title',
      'description': '123'
    });
    next();
});

然后在您的angularJS应用程序中,您可以从http标题中读取它们。

答案 2 :(得分:-1)

您应该在前端(角度js)尝试interceptors,以便为每个请求api发送多个变量。

在下面的代码中,我将在标题中发送标题和说明。

module.factory('varInfoInterceptors',  function($q) {  
    var sendInfoInjector = {
        request: function(config) {
                config.headers['x-headers-title'] = 'Test title';
                config.headers['x-headers-desc'] = 'This is test site';
            return config;
        }
    };
    return sendInfoInjector;
});
module.config(['$httpProvider', function($httpProvider) {  
    $httpProvider.interceptors.push('varInfoInterceptors');
}]);

只需调用 req.headers express路径

即可在服务器端(nodejs / expressjs)获取这些值

谢谢,

的Dinesh