Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 向ExpressJS中的所有路由发送变量_Node.js_Express - Fatal编程技术网

Node.js 向ExpressJS中的所有路由发送变量

Node.js 向ExpressJS中的所有路由发送变量,node.js,express,Node.js,Express,使用nodejs/expressjs为我的web应用构建api,我想向所有api发送一些变量,比如站点标题和描述等 我偶然发现了使用dynamicHelper()的旧解决方案,该解决方案已不再使用。这样做的新方法是什么?最简单的方法是加入一些中间件,将其作为局部变量连接到响应对象(这些将自动显示在您的视图中)。比如: app.use(function(req,res,next) { res.locals = { title : 'your title', descrip

使用nodejs/expressjs为我的web应用构建api,我想向所有api发送一些变量,比如站点标题和描述等


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

最简单的方法是加入一些中间件,将其作为局部变量连接到响应对象(这些将自动显示在您的视图中)。比如:

app.use(function(req,res,next) {
   res.locals = {
     title : 'your title',
     description : 'your description'
   };
   return next();
});
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);
}
**编辑以说明API端点必须执行的操作 由于每个端点可能负责自己的对象,因此您还可以执行以下操作:

app.use(function(req,res,next) {
   res.locals = {
     title : 'your title',
     description : 'your description'
   };
   return next();
});
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响应的一部分中

最简单的方法是加入一些中间件,将其作为局部变量附加到响应对象上(这些将自动显示在您的视图中)。比如:

app.use(function(req,res,next) {
   res.locals = {
     title : 'your title',
     description : 'your description'
   };
   return next();
});
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);
}
**编辑以说明API端点必须执行的操作 由于每个端点可能负责自己的对象,因此您还可以执行以下操作:

app.use(function(req,res,next) {
   res.locals = {
     title : 'your title',
     description : 'your description'
   };
   return next();
});
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响应的一部分中

您应该在前端(angular js)尝试在每个请求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.headersroutes,就可以在服务器端(nodejs/expressjs)获得这些值

谢谢

Dinesh

您应该在前端(angular js)尝试在每个请求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.headersroutes,就可以在服务器端(nodejs/expressjs)获得这些值

谢谢


Dinesh

既然您提到您没有在expressjs中使用任何视图引擎,我假设您只是依靠angularJS来进行客户端重新渲染。您可以将这些服务器端数据传递到http头,然后从客户端读取它们。要做到这一点,在你的路由器中,你可以这样做

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

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

既然你提到你没有在expressjs中使用任何视图引擎,我假设你只是依靠angularJS来进行客户端重新设计。您可以将这些服务器端数据传递到http头,然后从客户端读取它们。要做到这一点,在你的路由器中,你可以这样做

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

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

我在前端的所有东西都使用angularJS,而expressjs应用程序只用于API。因此,不要在express中使用视图引擎。@JoshuaLeung-如果您有更多的要求,如您刚才提到的,请将这些详细信息放入您的问题中。你的问题缺乏足够的细节,任何人都不知道如何正确回答。但我已经说过“使用nodejs/expressjs为我的web应用构建api”是这一段中的第一件事……我不确定这是否会改变我的答案。您询问如何使其可用于每个端点;我的回答是这样的。然后,您可以将该对象与端点发送给客户端的任何响应合并。如果你使用的是一个视图引擎,它就可以工作,很高兴知道你是否需要这个功能。我在前端使用angularjs,而expressjs应用程序只用于API。因此,不要在express中使用视图引擎。@JoshuaLeung-如果您有更多的要求,如您刚才提到的,请将这些详细信息放入您的问题中。你的问题缺乏足够的细节,任何人都不知道如何正确回答。但我已经说过“使用nodejs/expressjs为我的web应用构建api”是这一段中的第一件事……我不确定这是否会改变我的答案。您询问如何使其可用于每个端点;我的回答是这样的。然后,您可以将该对象与端点发送给客户端的任何响应合并。如果你使用的是一个视图引擎,它就可以工作,这一事实很好地说明你是否需要这个功能。这个问题中没有足够的细节让我们来回答。“向所有API发送一些变量”是什么意思?您的服务器中的每一条路由都是API吗?或者某些路由是在做API以外的事情吗?您使用什么代码来构造API响应?你回来了吗?您的API响应是什么样子的?您能否向我们展示典型API响应的代码,以及添加特殊变量后的实际响应?你想添加什么类型的变量?这个问题没有足够的细节让我们回答。“向所有API发送一些变量”是什么意思?您的服务器中的每一条路由都是API吗?或者某些路由是在做API以外的事情吗?您使用什么代码来构造API响应?你回来了吗?您的API响应是什么样子的?您能否向我们展示典型API响应的代码,以及添加特殊变量后的实际响应?要添加哪种类型的变量?