Javascript 在nodejs中放置数据库检查的正确位置
我正在用NodeJS和ExpressJS构建一个应用程序。 我的文件夹结构如下所示:Javascript 在nodejs中放置数据库检查的正确位置,javascript,node.js,asynchronous,model-view-controller,express,Javascript,Node.js,Asynchronous,Model View Controller,Express,我正在用NodeJS和ExpressJS构建一个应用程序。 我的文件夹结构如下所示: /app /controllers /models 我试图分离模型中的所有逻辑和db调用以及控制器中的“usertomodel”操作。 在控制器中,我有以下代码:(在控制器中) 做简单的检查。 但在完成所有验证之后,我需要执行3次异步DB调用(例如检查文件是否存在、权限等),并且在模型中使用asyncnpm包中的瀑布模块,它看起来如下:(在模型中) 我的问题是: 我这样做对吗 我应该将“瀑布
/app
/controllers
/models
我试图分离模型中的所有逻辑和db调用以及控制器中的“usertomodel”操作。
在控制器中,我有以下代码:(在控制器中)
做简单的检查。
但在完成所有验证之后,我需要执行3次异步DB调用(例如检查文件是否存在、权限等),并且在模型中使用async
npm包中的瀑布模块,它看起来如下:(在模型中)
我的问题是:
- 我这样做对吗
- 我应该将“瀑布”放在控制器中还是应该留在模型中
- 有没有更好的方法进行这些检查
createFile
方法适用于模型,我建议将该代码放入您的模型中——一般的MVC规则是保持您的摘要非常清晰——隔离模型中所有与数据相关的代码,并尽可能保持控制器的纯净
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(){...});
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);
});
},