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();
- 验证参数();
定义一个函数来完成你的日常工作
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
}
我正在用 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();
- 验证参数();
定义一个函数来完成你的日常工作
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
}