Ketika saya pertama kali masuk ke Node.js, Express, dan Mongoose, saya kesulitan menskalakan kode saya. Maksud dari jawaban saya adalah untuk membantu seseorang yang mengerjakan lebih dari sekadar blog sederhana, tetapi juga untuk membantu proyek skalabel yang lebih besar.
- Saya selalu terhubung ke database, saya tidak membuka dan menutup koneksi saat dibutuhkan
- Saya menggunakan
index.js
sebagai file root folder, seperti yang akan kita lakukan dalam bahasa lain - model disimpan dalam dokumennya sendiri, dan
require()
d ke dalammodels/index.js
berkas. - rute mirip dengan model, setiap tingkat rute memiliki folder, yang memiliki
index.js
berkas secara bergantian. Jadi mudah untuk mengatur sesuatu sepertihttp://example.com/api/documents/:id
. Ini juga lebih masuk akal ketika seseorang menelusuri struktur file.
Berikut struktur yang saya gunakan:
-- app.js
-- models/
---- index.js
---- blog.js
-- mongoose/
---- index.js
-- routes/
---- index.js
---- blog/index.js
-- public/
-- views/
---- index.{your layout engine} => I use Jade.lang
-- methods/
---- index.js => use if you'd rather write all your functions here
---- blog.js => can store more complex logic here
app.js
var db = require('./mongoose'),
express = require('express');
// note that I'm leaving out the other things like 'http' or 'path'
var app = express();
// get the routes
require('./routes')(app);
// I just require routes, without naming it as a var, & that I pass (app)
luwak/index.js
// Mongoose connect is called once by the app.js & connection established
// No need to include it elsewhere
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/blog');
// I have just connected, and I'm not exporting anything from here
models/index.js
// Logic here is to keep a good reference of what's used
// models
Blog = require('./blog');
// User = require('./user');
// exports
exports.blogModel = Blog.blogModel;
// exports.userModel = User.userModel;
models/blog.js
Jadi untuk setiap model yang Anda kerjakan, buat model.js
dokumen, dan tambahkan di models/index.js
di atas. Sebagai contoh saya telah menambahkan User
model tetapi mengomentarinya.
// set up mongoose
var mongoose = require('mongoose');
var Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var BlogSchema = Schema({
header: {type: String },
author: {type: String },
text: {type: String },
_id: { type: ObjectId } // not necessary, showing use of ObjectId
});
Blog = mongoose.model('Blog', BlogSchema);
// the above is necessary as you might have embedded schemas which you don't export
exports.blogModel = Blog;
rute/index.js
module.exports = function(app) {
app.get('/', function(req, res) {
// do stuff
});
require('./blog')(app);
// other routes entered here as require(route)(app);
// we basically pass 'app' around to each route
}
routes/blog/index.js
module.exports = function(app) {
app.get('/blog', function(req, res) {
// do stuff
});
require('./nested')(app);
// this is for things like http://example.com/blog/nested
// you would follow the same logic as in 'routes/index.js' at a nested level
}
penggunaan yang disarankan
- models:untuk membuat logika yang berhubungan dengan dokumen, yaitu membuat, memperbarui, menghapus, dan mencari.
- rute:pengkodean minimal, hanya saat saya perlu mengurai data http, membuat instance model, lalu saya mengirim kueri ke model yang relevan.
- metode:untuk logika yang lebih kompleks yang tidak secara langsung melibatkan model. Sebagai contoh, saya memiliki
algorithms/
folder tempat saya menyimpan semua algoritme yang saya gunakan di aplikasi saya.
Semoga ini memberikan lebih banyak kejelasan. Struktur ini bekerja dengan sangat baik bagi saya karena menurut saya mudah untuk diikuti.