私の意見では、作業しているデータベース アーチの種類に大きく依存します。MySQL を使用する場合は、通常コントローラーで使用しますが、MongoDB を使用する場合は、より自然に感じるようにモデルに入れます。正直に言うと、NodeJS はよりアップグレードされた JavaScript であるため、MVC は定義がすべてです。
MVC と NPM を介した NodeJS の構造について考えると、データベース アクセスを新しいモジュールに移行することを簡単に考えることができます。また、nodeJS でデータベース アクセスを実装する方法にも完全には満足していません。
Express を使用する場合、通常は RESTful インターフェイスを適用し、ルートを使用して CRUD 操作を設定します。私のアプリケーションはそれほど大きくなかったので、そのような振る舞いは圧倒的に大きかったでしょうが、大きなプロジェクトでは、このようなルートを構築したいと思うかもしれません
app.get('/api/item', function(req, res){
//access to your API and do database business
});
と呼ばれるデータベース アクセス ファイルに分割することで、より適切で整理された形式に変換できますdatbase.js
。
require('./datbase.js').setupDatabase('localhost', port);
たとえば、そのようなデータベースオーガナイザーは次のようになります
function setupDatabase(address, port) {
//connect to your datbase
//access to your API and do database business
});
}
module.exports.setupDatabase = setupDatabase;
個人的にはそのような方法でこれを試したことはありませんが、データベースへのアクセス方法をより適切に構築するのに役立つと思います。これが役に立ったことを願っています!
編集
CRUD の実装が要求されたため、Mongoose で投稿しています。作業している他のすべてのDBと交換できます
var application_root = __dirname,
express = require("express"),
path = require("path"),
mongoose = require('mongoose');
var app = express();
mongoose.connect('mongodb://localhost/my_database');
var Item = mongoose.model('Item', new mongoose.Schema({
text: String
}));
app.configure(function(){
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(application_root, "public")));
});
app.get('/', function(req, res){
res.send('Hello World');
});
app.get('/item', function(req, res){
res.render('item', {title: "Your App"});
});
app.get('/api/items', function(req, res){
return Item.find(function(err, items) {
return res.send(items);
});
});
app.get('/api/items/:id', function(req, res){
return Item.findById(req.params.id, function(err, item) {
if (!err) {
return res.send(item);
}
});
});
//etc.
これらの CRUD 操作はすべて、Backbone アプリに導入し、MongoDB に接続したモデルに対して存在します。MongoDB への一般的なパスの代わりに、他のパッケージを使用して、NPM を使用して mysql クエリを作成し、nodejs-mysql-nativeをインストールすることもできます。これは時々非常に役立つことがわかりました。