• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

350
Views
NodeJS ¿Cómo puedo hacer mi ruta fuera del middleware?

Tengo algunas rutas en mi API. Y tener un middleware. Está creando un token de portador y comprobándolo. Pero quiero que algunas de mis rutas no ingresen a ese middleware para poder acceder sin token. ¿Cómo puedo hacerlo? Mi software intermedio:

 app.use(async (req, res, next) => { if ( req.path === "/api/v1/collection/byhome" || // I dont want that part. req.path === "/api/v1/user/login" // Its working but its not looks like best solution. ) { next(); } else { const bearerHeader = req.header("authorization"); if (typeof bearerHeader !== "undefined") { const bearer = bearerHeader.split(" "); const bearerToken = bearer[1]; req.token = bearerToken; jwt.verify(req.token, process.env.SECRETKEY, async (err, authData) => { if (err) { res.sendStatus(401); } else { next(); } }); } else { res.statusCode = 400; const Response = { message: "Invalid Token", StatusCode: res.statusCode, }; res.json(Response); } } });

Mi ruta:

 app.get( `/api/${version}/article/bycollection/:id`, ArticleRoute.getbycollection );
over 3 years ago · Santiago Trujillo
3 answers
Answer question

0

su forma de hacerlo es correcta, puede hacer que su código sea más legible haciendo una matriz de todo el middleware que desea que esté fuera del alcance de su middleware

 const whiteListEndpoints = ["/api/v1/this", "/api/v1/this1", "/api/v1/this2"]

después

 // your middleware app.use((req, res,next) => { //if the path was in the whitelist just call next function if(whiteListEndpoints.includes(req.url)) return next() // let the middlware do it's job })

o puede cambiar su orden de use expreso

 const firstRoute = app.use("/no_middleware", router); app.use((req, res, next) => {}) // your middleware const secondRoute = app.use("/with_middleware", router);

aquí el primer enrutador no usará el middleware ya que aún no ha sido llamado.

over 3 years ago · Santiago Trujillo Report

0

Puede usar Express.Router para lograr el resultado deseado. Con el enrutador express puede diferenciar entre rutas y tener diferentes middlewares para cada enrutador.

Siga los pasos que se indican a continuación:

  1. Cree un middleware de autenticación middlewares/private.authenticate.js
 function auth(req, res, next) { // do auth stuff... next(); }
  1. Cree un archivo routes/private/index.js
 // private route handler import { Router } from "express"; import auth from "./middlewares/private.authenticate.js"; const router = Router(); router.use(auth); // use auth middleware router.route("/") .get() .put() export default router;
  1. Cree un archivo routes/public/index.js
 import { Router } from "express"; const router = Router(); router.route("/") .get() .put() export default router;
  1. Su archivo de aplicación express
 import express from "express"; const app = express(); import PublicRoutes from "./routes/public"; import PrivateRoutes from "./routes/private"; // public routes path app.use("/api/public", PublicRoutes); // private routes path app.use("/api/private", PrivateRoutes);
over 3 years ago · Santiago Trujillo Report

0

Puede crear una ruta express.Router() y configurarla en una path , este enrutador tiene toda la autenticación, luego cree un segundo express.Router() y esto sin autenticación.

 var router = express.Router(); // your code for API auth... router.get('/api/v1/collection/byhome',myMiddleware, (req, res, next) => { res.send('Hey There'); }) app.use('/api', router); var routerGuest = express.Router(); // routerGuest.get('/', (req, res, next) => { res.send('Hey There'); }) app.use('/guest', routerGuest)

para la autenticación, recomiendo hacer un middleware separado y luego pasarlo a nuestra ruta

 function myMiddleware(req, res, next){ const bearerHeader = req.header("authorization"); if (typeof bearerHeader !== "undefined") { const bearer = bearerHeader.split(" "); const bearerToken = bearer[1]; req.token = bearerToken; jwt.verify(req.token, process.env.SECRETKEY, async (err, authData) => { if (err) { res.sendStatus(401); } else { next(); } }); } else { res.statusCode = 400; const Response = { message: "Invalid Token", StatusCode: res.statusCode, }; res.json(Response); } } }

Creo que con esto puedes tener alguna idea para hacerlo :)

over 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error