Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/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
Javascript 节点JS-res.locals不是函数_Javascript_Node.js_Express_Middleware - Fatal编程技术网

Javascript 节点JS-res.locals不是函数

Javascript 节点JS-res.locals不是函数,javascript,node.js,express,middleware,Javascript,Node.js,Express,Middleware,在我的NodeJS应用程序中,我在某些路由中使用一个函数作为中间件。我通常使用res.locals作为函数,以避免覆盖res.locals对象。但是现在我将nodejs和express更新为最新版本,我不知道为什么会出现以下错误: Unhandled rejection TypeError: res.locals is not a function at /home/jose/workspace/tfg/server.js:116:8 at tryCatcher (/home/j

在我的NodeJS应用程序中,我在某些路由中使用一个函数作为中间件。我通常使用res.locals作为
函数
,以避免覆盖
res.locals
对象。但是现在我将nodejs和express更新为最新版本,我不知道为什么会出现以下错误:

Unhandled rejection TypeError: res.locals is not a function
    at /home/jose/workspace/tfg/server.js:116:8
    at tryCatcher (/home/jose/workspace/tfg/node_modules/bluebird/js/release/util.js:11:23)
    at Promise._settlePromiseFromHandler (/home/jose/workspace/tfg/node_modules/bluebird/js/release/promise.js:491:31)
    at Promise._settlePromise (/home/jose/workspace/tfg/node_modules/bluebird/js/release/promise.js:548:18)
    at Promise._settlePromise0 (/home/jose/workspace/tfg/node_modules/bluebird/js/release/promise.js:593:10)
    at Promise._settlePromises (/home/jose/workspace/tfg/node_modules/bluebird/js/release/promise.js:672:18)
    at Async._drainQueue (/home/jose/workspace/tfg/node_modules/bluebird/js/release/async.js:125:16)
    at Async._drainQueues (/home/jose/workspace/tfg/node_modules/bluebird/js/release/async.js:135:10)
    at Immediate.Async.drainQueues [as _onImmediate] (/home/jose/workspace/tfg/node_modules/bluebird/js/release/async.js:16:14)
    at processImmediate [as _immediateCallback] (timers.js:383:17)
该中间件的作用如下所示:

function middle_datos (req, res, next){

    var id_usuario = req.user ? req.user._id : 'undefined';

    // object to override res.locals
    var variables_locales = {
        ip: IP,
        message: JSON.stringify({
            error: req.flash('error'),
            success: req.flash('success'),
            info : req.flash('info'),
        }),
        title: 'Informa Torrent',
        subtitle: 'La app con la que podrás contribuir a la mejora de Torrent.',
        user: req.user, 
        id_usuario: id_usuario
    };

    db.query(queries.obtener_datos_app) // consultamos los datos de la app
        .then (function(datos_app){

            variables_locales.datos_app = datos_app; // obtenemos datos app

            if (! req.user) throw new Error('no estás loggeado'); // Si no hay usuario conectado --> Continuamos adelante
                                               // ya que no consultamos notificaciones ni acciones  

            return db.query(queries.obtener_notificaciones, req.user._id); // consultamos notificaciones

        })
        .then(function(notificaciones){
            // obtenemos notificaciones
            variables_locales.mis_notificaciones = notificaciones; // ls pasamos al objeto res.locals

            return db.query(queries.obtener_acciones, req.user._id); // consultamos acciones

        })
        .then (function(acciones){
            // obtenemos acciones
            variables_locales.mis_acciones = acciones;
            res.locals(variables_locales); // Error
            next(); // siguiente ruta o middleware
        })
        .catch(function (error) {
            console.log('Error middleware ' + error); // print the error;
            res.locals(variables_locales);
            next(); // siguiente ruta o middleware
        });

};
那么,res.locals有什么问题

另外,如果我尝试以这种方式将一些键值推送到res.locals:

res.locals.someKey = someValue;
我无法从jade模板访问该变量


任何帮助都将不胜感激

res.locals
不是一个函数。因此,您应该如下设置变量:

res.locals = variables_locales;
p= locals.title
对于JADE模板,您可能需要将res.locals变量传递给渲染引擎:

res.render('index', {
    locals: res.locals
});
然后访问JADE中的变量,如下所示:

res.locals = variables_locales;
p= locals.title

非常感谢。我试过了,效果很好!我意识到没有必要把当地人传给杰德。