Tôi đang xây dựng một API REST với việc sử dụng NodeJS (Mongoose & ExpressJS). Tôi nghĩ rằng tôi có một cấu trúc cơ bản khá tốt vào lúc này, nhưng tôi tự hỏi thực hành tốt nhất là gì cho loại dự án này.Cấu trúc API ExpressJS & Mongoose REST: các phương pháp hay nhất?
Trong phiên bản cơ bản này, mọi thứ đều đi qua tệp app.js
. Mỗi phương thức HTTP sau đó được chuyển đến tài nguyên đã được yêu cầu. Điều này cho phép tôi tự động thêm tài nguyên vào API và mọi yêu cầu sẽ được chuyển theo đó. Để minh họa:
// app.js
var express = require('express');
var mongoose = require('mongoose');
var app = express();
app.use(express.bodyParser());
mongoose.connect('mongodb://localhost/kittens');
var db = mongoose.connection;
var resources = [
'kitten'
];
var repositories = {};
for (var i = 0; i < resources.length; i++) {
var resource = resources[i];
repositories[resource] = require('./api/' + resource);
}
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback() {
console.log('Successfully connected to MongoDB.');
app.get('/:resource', function (req, res) {
res.type('application/json');
repositories[req.params.resource].findAll(res);
});
app.get('/:resource/:id', function (req, res) {
res.type('application/json');
repositories[req.params.resource].findOne(req, res);
});
app.listen(process.env.PORT || 4730);
});
-
// api/kitten.js
var mongoose = require('mongoose');
var kittenSchema = mongoose.Schema({
name: String
});
var Kitten = mongoose.model('Kitten', kittenSchema);
exports.findAll = function (res) {
Kitten.find(function (err, kittens) {
if (err) {
}
res.json(kittens);
});
};
exports.findOne = function (req, res) {
Kitten.findOne({ _id: req.params.id}, function (err, kitten) {
if (err) {
}
res.json(kitten);
});
};
Rõ ràng, chỉ có một vài phương pháp đã được thực hiện cho đến nay. Các bạn nghĩ sao về cách tiếp cận này? Bất cứ điều gì tôi có thể cải thiện?
Ngoài ra, một bên câu hỏi nhỏ: Tôi phải đòi hỏi cầy mangut trong mỗi tập tin tài nguyên API (như trong api\kitten.js
, là có một cách để chỉ toàn cầu đòi hỏi nó trong file app.js hoặc một cái gì đó
Bất kỳ đầu vào? được đánh giá rất nhiều!