В моем узле js app я использую функцию в качестве промежуточного программного обеспечения в некоторых маршрутах. Обычно я использовал res.locals как function
, чтобы не переопределять объект res.locals
. Но теперь я обновил nodejs и выразить последние версии и Яне знаю, почему я получаю следующее сообщение об ошибке:Узел JS - res.locals не является функцией
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;
Я не могу получить доступ к этой переменной из моего шаблона нефрита.
Любая помощь была бы оценена!
Спасибо! Я попробовал и отлично работает! Я понимаю, что нет необходимости передавать res.locals в нефрит. –