我使用nodejs Express。我想有一个接收id或用户名的路由器作为请求参数,如下所示:
router.get('/:id?/:username?', authMiddleware, function (req, res, next) {
models
.User
.findAll({
where: {
$or: {
id: req.params['id'],
username: req.params['username']
}
}
})
.then(function (rows) {
res.send(rows);
})
}
然而,快递似乎不理解我的要求: http://localhost:3000/api/1.0/users//david
我想通过用户名而不是id
来查询用户现在唯一可行的方法是将路由定义为:/:id_or_username,如下所示:
router.get('/:id_or_username', function (req, res, next) {
models
.User
.findAll({
where: {
$or: {
id: req.params['id_or_username'],
username: req.params['id_or_username']
}
}
})
.then(function (rows) {
res.send(rows);
})
}
但它有点脏,我对这段代码不满意。 在这种情况下,使用REST样式而不是:idOrName param?
可以定义路由器答案 0 :(得分:1)
我不确定你的系统是如何设置的,但这对于req.query而不是req.param更好用。
当你不确定输入是什么时,你应该使用req.query,并在传递你肯定会在那里的信息时使用req.param。 req.param可能有一种方法可以做到这一点,但我不确定我能想到你为什么要这样做的原因。
通过这种方式,您可以执行以下操作:
action = "/users/"+ id ? id : username
然后req.query为它。
答案 1 :(得分:1)
假设您的ID为int
,您可以执行以下操作:
router.get('/:id_or_username', function (req, res, next) {
var where = {}
var param = req.params['id_or_username']
if (isNaN(param)) {
where.username = param
} else {
where.id = param
}
models.User.findAll({where}).then(function (rows) {
res.send(rows)
})
}
现在,您可以使用相同的参数
发送id
或username