Я создаю приложение с NodeJS и ExpressJS. Моя структура папок выглядит следующим образом:Правильное место для размещения проверок db в nodejs
/app
/controllers
/models
И я пытаюсь отделить всю логику и Db вызовов в модели и «usertomodel» действия в контроллере. В контроллере у меня есть следующий код: (в контроллере)
app.post('/api/nodes/upload/image', processMultipartForm, function(req, res) {
if (!req.files.file) {
return res.status(400).json({
message: 'INVALID_FILE'
});
}
...
if (ALLOWED_FORMATS.indexOf(file.mimetype) == -1) {
return res.status(400).json({
message: 'INVALID_FILE_FORMAT'
});
}
.....
NodesModel.createFile({
...
}, {...}, function(){...});
Для простых проверок. Но после того, как я закончил со всей проверкой, мне нужно сделать как 3 асинхронных вызова БД (например, чтобы проверить, существует ли файл, разрешения и т. Д.), И я использую модуль водопада от async
нпм-пакета в модели, и он выглядит как это: (в модели)
NodesSchema.statics.createFile = function(opts, user, cb) {
var _this = this;
async.waterfall([
function(callback) {
_this.findOne({
_id: opts.location
}, function(err, data) {
if (err) {
console.error(err);
return callback('INTERNAL_ERROR');
}
if (!data) {
return callback('INVALID_LOCATION');
}
callback(null, opts.location);
});
},
function(location, callback) {
_this.findOne({
location: location,
owner: user._id,
name: opts.name,
isFile: false
}, function(err, data) {
if (err) {
console.error(err);
return callback('INTERNAL_ERROR');
}
if (data) {
return callback('FILE_EXISTS');
}
callback(null);
});
},
Мои вопросы:
- Могу ли я делать это правильно?
- Должен ли я помещать «водопад» в контроллер или он должен оставаться в модели?
- Есть ли лучший способ сделать эти проверки?