/ / Como aplicar middleware a um roteador específico em expresso? - node.js, express

Como aplicar o middleware a um roteador específico em expresso? - node.js, express

Abaixo o código é de http://expressjs.com/en/guide/using-middleware.html#middleware.router. Ele define um middleware na instância expressa do roteador. Funciona bem, mas se eu definir outro roteador e esse roteador também usará o mesmo middleware. Posso definir um middleware apenas para um determinado express.Router() instância?

var app = express()
var router = express.Router()

// predicate the router with a check and bail out when needed
router.use(function (req, res, next) {
if (!req.headers["x-auth"]) return next("router")
next()
})

router.get("/", function (req, res) {
res.send("hello, user!")
})

// use the router and 401 anything falling through
app.use("/admin", router, function (req, res) {
res.sendStatus(401)
})

Respostas:

0 para resposta № 1

Para usar algo específico em uma rota, você pode usar a função .all ()

router.route("/")
.all(function (req, res, next){
// do middleware stuff here and call next
next();
})
.get(function (req, res) {
res.send("hello, user!");
});

0 para resposta № 2

Você pode usar o seguinte para aplicar um middleware que será usado pela solicitação all.

Você pode separar route2 abaixo em um novo js arquivo e exportá-lo de lá. (Exemplo: app.use(require("./routes/particularOne")))

(http://expressjs.com/en/4x/api.html#router)

var router = express.Router()
// STEP 1 - defining a new router
var router2 = express.Router()


// STEP 2 - catch a particular route by using the new router
router2.get("/particularOne", function (req,res,next) {

// to do something here
console.log(req.headers)

next()
})


// STEP 3 - Adding the new router into the Express app
app.use(router2)

// use the router and 401 anything falling through
app.use("/admin", router, function (req, res) {
res.sendStatus(401)
})