Normalmente, una función se pasa como devolución de llamada en app.use() , así:
const express = require('express'); const app = express(); app.use(function (req, res, next) { console.log('Time:', Date.now()); next(); });Sin embargo, en el caso de node-expose-sspi , se pasa un método:
const express = require('express'); const { sso } = require('node-expose-sspi'); const app = express(); app.use(sso.auth()); //stores something in req.sso app.use((req, res, next) => { res.json({ sso: req.sso, }); }); ¿Por qué se pasa el método con () ? Si usa () ¿por qué no se llama inmediatamente (sin argumentos)?
Además, ¿cómo puedo envolver un método en una función de devolución de llamada, por ejemplo?
app.use(myCallback); function myCallback(req, res, next) { sso.auth(); //req.sso is undefined }app.use(sso.auth()); llama a sso.auth() y app.use() como su valor de retorno.
Puede encontrar aquí en la fuente node-expose-sspi que .auth() de hecho devuelve una nueva función de middleware.
En cuanto a la segunda pregunta
Además, ¿cómo puedo envolver un método en una función de devolución de llamada?
no deberías hacer eso: Express llamará a tus middlewares use en orden; una devolución de llamada posterior tendrá acceso a lo que un middleware anterior haya inyectado en la solicitud.
Si por alguna razón realmente necesita hacer eso,
const ssoAuth = sso.auth(); function myCallback(req, res, next) { ssoAuth(req, res, () => { // whatever would regularly be in `myCallback` next(); }); } ``