2017-04-04 34 views
0

我试图在我的express js应用程序中实现中间件功能,它遵循一个简单的MVC体系结构。Express js:不调用中间件功能

routes.jsroute

//load the controller auth.js 
var auth = require('../controllers/auth'); 
//auth route 
router.route('/auth').get(auth.simpleAuth); 

auth.jscontrollers

//load the middleware 
var middleware = require('../middleware/middleware'); 

module.exports={ 
    simpleAuth:function (req,res) { 
     //invoke middleware 
     middleware.testMiddleware; 
     res.send('middleware test completed'); 
    } 
} 

middleware.jsmiddleware

module.exports={ 
    testMiddleware:function (req,res,next) { 
     console.log('inside middleware'); 
     if(req.username == true){ 
      next(); 
     }else{ 
      console.log('auth failed') 
     } 

    } 
} 

没有错误消息是但是当我访问auth路由时,不会调用中间件功能。

+0

请看看expressjs中间件https://expressjs.com/en/guide/using-middleware。 html –

回答

1

您没有正确调用它。尝试从路由中调用它。

routes.js

var middleware = require('../middleware/middleware'); 

router.route('/auth').all(middleware.testMiddleware).get(auth.simpleAuth); 

middleware.js

testMiddleware: function (req,res,next) { 
    console.log('inside middleware'); 
    if(req.username == true) { 
     next(); 
    } else { 
     // error 
     return res.status(401).json({ "message" : "auth failed"}); 
    } 
} 
+1

“全部”的含义是什么 – Jabaa

+1

这意味着,所有类型的http请求,例如'GET','POST'将通过中间件。 –

+0

它匹配所有的HTTP动词 –