2016-12-21 4 views
0

was ich will es tun.Einrichten einer Middleware in router.route() in nodejs (Express)

router.post('/xxxx', authorize , xxxx); 

    function authorize(req, res, next) 
    { 
    if(xxx) 
     res.send(500); 
    else 
    next(); 
    } 

Ich möchte auf jeder Route nach Sitzung suchen. Aber da die Router auf diese Weise geschrieben sind.

router.route('/xxx/xxxx').post(function(req, res) { 
    // blah lah here... 
    // 
}); 

Wie kann ich ein Middleware, die für Sitzung überprüfen, und ich wollte die Dinge ein bisschen mehr Generika machen und wollte stattdessen in jedem request.Any der Kontrolle eine einzige authorise Funktion zu tun, eine einzige Sache haben, Vorschläge.

Antwort

2

Definieren Sie eine Middleware-Funktion, bevor Sie Ihre Routen definieren/einbeziehen. So vermeiden Sie, auf jeder Route nach einer gültigen Sitzung zu suchen. Im folgenden Code finden Sie ein Beispiel dazu.

Wenn einige Routen öffentlich sind, dh sie eine gültige Session keinen Benutzer erfordern haben dann diese definieren, bevor Sie Ihre middlware Funktion

var app = require("express")(); 

//This is the middleware function which will be called before any routes get hit which are defined after this point, i.e. in your index.js 
app.use(function (req, res, next) { 

    var authorised = false; 
    //Here you would check for the user being authenticated 

    //Unsure how you're actually checking this, so some psuedo code below 
    if (authorised) { 
    //Stop the user progressing any further 
    return res.status(403).send("Unauthorised!"); 
    } 
    else { 
    //Carry on with the request chain 
    next(); 
    } 
}); 

//Define/include your controllers 

Wie pro Ihre Kommentar ‚Verwendung‘, haben Sie zwei Möglichkeiten mit Bedenken Sie, dass diese Middleware nur einige Routen beeinflusst, siehe unten zwei Beispiele.

Option 1 - Deklarieren Sie Ihre spezifischen Routen vor der Middleware.

app.post("/auth/signup", function (req, res, next) { ... }); 
app.post("/auth/forgotpassword", function (req, res, next) { ... }); 

//Any routes defined above this point will not have the middleware executed before they are hit. 

app.use(function (req, res, next) { 
    //Check for session (See the middlware function above) 
    next(); 
}); 

//Any routes defined after this point will have the middlware executed before they get hit 

//The middlware function will get hit before this is executed 
app.get("/someauthorisedrouter", function (req, res, next) { ... }); 

Option 2 Definieren Sie Ihre middlware Funktion irgendwo und es erfordern, wo

/middleware.js benötigt

module.exports = function (req, res, next) { 
    //Do your session checking... 
    next(); 
}; 

Jetzt können Sie es benötigen, wo immer Sie es wollen.

/index.js

var session_check = require("./middleware"), 
    router = require("express").Router(); 

//No need to include the middlware on this function 
router.post("/signup", function (req, res, next) {...}); 

//The session middleware will be invoked before the route logic is executed.. 
router.get("/someprivatecontent", session_check, function (req, res, next) { ... }); 


module.exports = router; 

Hoffnung, dass Sie eine allgemeine Vorstellung davon, wie haben Sie diese Funktion erreichen können.

+0

hey lee das wird lösen, aber es wird auf alle Routen gelten Ich denke, das ist nicht genau das, was ich will, wollte ich es zu bestimmten Routen hinzufügen hinterlassen etwas wie Anmeldung, Passwort vergessen usw. –

+0

Sie haben zwei Möglichkeiten Ja wirklich. Sie können Ihre Anmelde- und Passwort-Routen definieren, BEVOR Sie die Middleware deklarieren, oder Sie können die Middleware-Funktion an alle Routen weitergeben, auf denen sie verwendet werden soll. –

+0

danke das hilft viel –

Verwandte Themen