2012-09-24 15 views
6

Estoy en express3.0rc2. Cómo usar app.locals.use (¿todavía existe) y res.locals.useexpress 3.0 cómo usar app.locals.use y res.locals.use

Vi esto https://github.com/visionmedia/express/issues/1131 pero app.locals.use arroja un error. Supongo que una vez que coloque la función en app.locals.use puedo usarla en las rutas.

que estaba pensando en añadir

app.locals.use(myMiddleware(req,res,next){res.locals.uname = 'fresh'; next();}) 

y luego en cualquier llamada ruta de este middleware

gracias

Respuesta

8

Si he entendido correctamente, puede hacer lo siguiente:

app.configure(function(){ 
    // default express config 
    app.use(function (req, res, next) { 
    req.custom = "some content"; 
    next(); 
    }) 
    app.use(app.router); 
}); 

app.get("/", function(req, res) { 
    res.send(req.custom) 
}); 

Ahora puede usar la variable req.custom en cada ruta. ¡Asegúrese de poner la función app.use antes del enrutador!

Editar:

bien próximo intento :) usted puede utilizar su middleware y especificarlo en las rutas que desea:

function myMiddleware(req, res, next) { 
    res.locals.uname = 'fresh'; 
    next(); 
} 

app.get("/", myMiddleware, function(req, res) { 
    res.send(req.custom) 
}); 

o puede establecer que "a nivel mundial":

app.locals.uname = 'fresh'; 

// which is short for 

app.use(function(req, res, next){ 
    res.locals.uname = "fresh"; 
    next(); 
}); 
+0

no Quiero llamar a la función a través de diferentes rutas y estoy asumiendo que app.locals me ayudaría a hacer eso – coool

+0

editado mi respuesta – zemirco

+0

gracias. pero si marcó el enlace github que envié, se ha definido el myMiddleware y luego una llamada a la aplicación en route.locals.use (myMiddleware) a partir de ahora en función de la ruta puede llamar a myMiddleware. pero no puedo hacerlo porque app.locals.use arroja un error. y cuál es el concepto con res.locals.use (entiendo res.locals) ... gracias de nuevo – coool

10

Estoy usando Express 3.0 y esto funciona para mí:

app.use(function(req, res, next) { 
    res.locals.myVar = 'myVal'; 
    res.locals.myOtherVar = 'myOtherVal'; 
    next(); 
}); 

Luego tengo acceso a myVal y myOtherVal en mis plantillas (o directamente a través de res.locals).

+1

entiendo res.locales pero ¿qué pasa con res.locals.use .. ?? – coool

+0

'res.locals' simplemente se usa para pasar valores a una plantilla. 'res.locals.use' no está definido a menos que lo asigne. Mira https://github.com/visionmedia/express/blob/master/lib/response.js#L708 –

+1

Estaba un poco confundido por la afirmación "Entonces tengo acceso a ** myVal ** y ** myOtherVal * * "porque pensé que significaba que podrías hacer algo como' myVar + = 'anotherString'', pero en realidad todavía tendrías que tener la parte ** res.locals. ** ie' res.locals.myVar + = ' otroString''. entonces funcionará –

Cuestiones relacionadas