Node.JS - 表达:编码风格

Node.JS - Express: Coding style

我正在用 Node.JS 和 Express 写一些休息 API。因此,对于每个 API,我需要做所有常见的事情,例如参数验证、身份验证、授权,然后是实际的业务逻辑。一些 sodo 代码来说明这一点:

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

        doGetUsers(); 
    )
})

这种风格确实可行,但它包含许多额外的前置代码,使整个功能变得非常繁琐。我知道在web app编程中,引入了MVC来将UI、Module和Controller分离成不同的代码组,这样就干净多了。有没有类似的框架可以帮助达到这个目的?

这就是我所做的。

Using Routes for Node.js 在这里,我正在为一个名为 routes 的文件夹让路,该文件夹中包含所有代码。

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

用这里的路由调用函数; .adduser 是该 js 文件中的函数名称

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

使用中间件。中间件只是一个接受三个参数的函数:

function (req, res, next) {}

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

这些都是中间件的功能:

  • authenticateCaller();
  • authorizeCaller();
  • 验证参数();

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

定义一个函数来完成你的日常工作

 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..}
})

这是我在 express 框架中验证和使用 API 所遵循的风格之一。

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
}