【发布时间】:2011-08-08 23:16:39
【问题描述】:
我正在使用 node.js 并在我当前的应用程序中表达。 我创建了几个中间件函数,每个函数的创建方式如下:
function loadUser(req, res, next){
...
}
我想创建一个中间件,用于在一个明确的操作中检查强制性参数的存在。例如,我有一个 /user/create 操作,它需要昵称、密码、电子邮件……作为强制参数。然后我需要将此参数列表传递给中间件,以便它可以检查这些参数是否存在于 req.query 中。
有什么想法吗?
更新
我终于完成了以下操作(在 express 文档中,有一个需要附加参数 http://expressjs.com/guide.html#route-middleware 的中间件示例)。
function checkParams(arr){
return function(req, res, next) {
// Make sure each param listed in arr is present in req.query
var missing_params = [];
for(var i=0;i<arr.length;i++){
if(! eval("req.query." + arr[i])){
missing_params.push(arr[i]);
}
}
if(missing_params.length == 0){
next();
} else {
next(JSON.stringify({ "error" : "query error", "message" : "Parameter(s) missing: " + missing_params.join(",") }));
}
}
}
然后像其他中间件一样调用它:
app.post('/user/create', checkParams(["username", "password"]), function(req, res){
...
});
【问题讨论】:
-
参数是 url 或查询参数的一部分?
/user/create/:name/:password/:email/或/user/create?username=...&password=...&email=...? -
@Raynos,参数是查询的一部分。
-
不错。只是一个问题,为什么要使用
eval("req.query." + arr[i])?req.query[arr[i]]应该能胜任 -
如果你使用 req.param(arr[i]) 你可以检查 GET 或 POST 参数
标签: javascript node.js express