我编写了第一个Swagger规范并使用generator-swagger(swagerize-express)生成了服务器存根。对于每个路径,我得到一个处理程序和一个dataProvider。 我的问题是我打算如何使用这些?
对于具体问题:如何更改以下代码,以便在数据库中查找用户并返回200
(如果找到)或404
如果找不到?
为处理程序生成的代码:
get: function getUser(req, res, next) {
/**
* Get the data for response 200
*/
var status = 200;
var provider = dataProvider['get']['200'];
provider(req, res, function (err, data) {
if (err) {
next(err);
return;
}
res.status(status).send(data && data.responses);
});
}
生成的dataProvider代码:
get: {
200: function (req, res, callback) {
/**
* Using mock data generator module.
* Replace this by actual data for the api.
*/
Mockgen().responses({
path: '/users/{id}',
operation: 'get',
response: '200'
}, callback);
},
404: function (req, res, callback) {
/**
* Using mock data generator module.
* Replace this by actual data for the api.
*/
Mockgen().responses({
path: '/users/{id}',
operation: 'get',
response: '404'
}, callback);
}
}
我知道我可以在处理程序中查找数据库。但这不是dataProvider的目的吗?
答案 0 :(得分:1)
我也很困惑。你找到了解决方案吗?我发现我可以使用提供的callback
在肯定的情况下(即找到数据库项目时)发送响应。
var id = req.params.id;
// item = ... get your data base item via id ...
callback(null, { responses: item });
我仍然想知道在负面情况下哪些参数传递给callback
。我试着打电话给callback(404)
,表示我希望服务器提供一个"资源未找到"响应。但是,这会导致HTTP-500错误。
答案 1 :(得分:0)
我想分享一下我决定如何构建我的应用程序。但是,我很想知道你是否找到了一种更有效的方法。以下是我的基本概念:
<强>处理程序/用户/ {ID}的.js 强>
get: function getUser(req, res, next) {
var status = 200;
var provider = dataProvider['get']['200'];
// Check if params.id is a valid integer
// If not, get response from dataProvider['get']['400']
if (isNaN(req.params.id)) {
status = 400;
provider = dataProvider['get']['400'];
provider(req, res, function(err, data) {
if (err) {
return next(err);
}
res.status(status).send(data && data.responses)
});
return;
}
provider(req, res, function(err, data) {
if (err) {
return next(err);
}
// Check if user with id exists
// If not, get response from dataProvider['get']['404']
if (!data) {
status = 404;
provider = dataProvider['get']['404'];
provider(req, res, function(err, data) {
if (err) {
return next(err);
}
res.status(status).send(data && data.responses)
});
return;
}
res.status(status).send(data && data.responses);
});
}
数据/用户/ {ID}的.js 强>
get: {
200: function(req, res, callback) {
User.find({
where: {
id: req.params.id
}
}).then(function(object) {
if (!object) {
return callback(null, null);
}
callback(null, {
responses: object.toJSON()
});
});
},
400: function(req, res, callback) {
callback(null, {
responses: ERR.USER.INVALIDID
});
},
404: function(req, res, callback) {
callback(null, {
responses: ERR.USER.NOTFOUND
});
}
},
我认为它看起来好像是为了很好地分离责任。我不确定这种模式是否来自其他框架/语言,但我找不到很多在线支持这一点。你觉得怎么样?