2016-01-13 59 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 
 
}