2016-01-13 67 views
2

我正在用Node.JS和Express编写一些其他API。所以对于每个API,我都需要完成所有常见的工作,比如参数验证,认证,授权以及实际的业务逻辑。一些SODO代码来说明这一点:Node.JS - Express:编码风格

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

     doGetUsers(); 
    ) 
}) 

这种风格一定工作,但它使整个功能通过包括了很多额外的用途预编码非常繁琐。我知道在网络应用程序编程中,已经引入了MVC将UI,模块和控制器分离成不同的代码组,这更加清洁。有没有类似的框架可以帮助实现这一目的?

+0

使用路线交配 –

回答

2

使用中间件。中间件只是一个具有三个参数的功能:

function (req, res, next) {} 

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

这些中间件的所有功能:

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

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

+0

谢谢马特。这是我想念的基本问题。 – Lee

1

这就是我所做的。

为Node.js使用路由在这里,我正在让一个名为路由的文件夹拥有所有的代码。

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

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

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

谢谢,甘道夫。我爱这个老人。 :) – Lee

+0

老人喜欢每个人。 xD –

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

这是我一直在下面的验证和快速的框架使用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 
 
}