Node.JS - Express:编码风格

时间:2016-01-13 03:30:36

标签: javascript node.js model-view-controller coding-style

我正在使用Node.JS和Express编写一些rest API。因此,对于每个API,我都需要执行所有常见的操作,例如参数验证,身份验证,授权以及实际的业务逻辑。一些sodo代码来说明这一点:

router.get('/users', function (req, res){
    async.auto(
        authenticateCaller();
        authorizeCaller();
        validateParams();

        doGetUsers(); 
    )
})

这种风格当然有效,但它通过包含许多额外的预用代码使整个功能变得非常麻烦。我知道在Web应用程序编程中,MVC已被引入将UI,Module和Controller分离成不同的代码组,这更加清晰。是否有任何类似的框架可以帮助实现这一目的?

4 个答案:

答案 0 :(得分:2)

使用中间件。中间件只是一个函数,它包含三个参数:

fetch("deal_company_branch")

在定义任何路由之前,请调用router.use()来注册中间件。这将导致在执行每个路由之前调用中间件。

这些都是中间件的功能:

  • authenticateCaller();
  • authorizeCaller();
  • validateParams();

http://expressjs.com/en/guide/using-middleware.html

答案 1 :(得分:1)

这就是我的工作。

使用Node.js的路由在这里,我正在为名为routes的文件夹让路,其中包含所有代码。

var routes = require('./routes');
var route_add_user = require('./routes/add_user');

在此处使用路线调用该功能; .adduser是该js文件中的函数名称

 app.get('/adduser', route_add_user.adduser);  

答案 2 :(得分:0)

定义一个函数做日常工作

 fuction auth(res,req,next){
     authenticateCaller();
    req.isAuthorized = authorizeCaller();
     validateParams();
     next();
    }

 router.get('/users',auth);
 router.get('/users', function (req, res){
   if( req.isAuthorized)
   {..do some stuff here..}
})

答案 3 :(得分:0)

这是我在关注身份验证并在快速框架中使用API​​的STYLE之一。

register.js
-----------
exports.addUser = function(req, res) { 
    // do something
};
exports.deleteUser = function(req, res) { 
    // do something
};

routes.js
---------
var register = require('./register');
router.get(‘/register’,auth, register.addUser);
router.get(‘/deleteUser’,auth, register.deleteUser);
// Better make it separate common file to reuse all the API
function auth(req,res,next) { 
   // do something to authenticate your API
}