我正在开发一个使用mongoose
、mongodb
和restify
. 我想了解在定义路由函数时从各种模型中导入代码是否是一种好习惯。这应该是一个相当简单的问题,我只需要指导,我就能自己编写代码。感谢您抽时间阅读。
我知道如何定义这种关系,但我不确定我应该如何建立实际的关系。也就是说,换句话说,在创建汽车时,将汽车添加到其中的最佳方式是什么。
请注意,我试图保持这个 api RESTful。
我有两个模型,我必须根据以下模式链接,这些模式存储在db/schema.js
:
//schema.js
var restify = require('restify');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;
// User Schema
exports.User = new Schema({
id: ObjectId,
name: String,
cars: [{ type: ObjectId, ref: 'Car' }],
});
// Car Schema
exports.Car = new Schema({
id: ObjectId,
name: String,
_user: { type: ObjectId, ref: 'User' },
});
然后我在 中构建模型models/...
,其中每个模型都有不同的文件。现在它们每个只有一行代码,但我将它们作为独立文件保留,以供我需要编写模型方法时使用。
在models/car.js
:
mongoose.model('Car', db_schema.Car);
在models/user.js
:
mongoose.model('User', db_schema.User);
最后,我用帖子设置了路线并将请求放入routes/cars.js
这还不是全部,只是回答我的问题所必需的。
module.exports = function(app) {
function putCar(req, res, next) {
Car.findById(req.params.id, function (err, car) {
if (!err) {
car.name = req.params.name;
car.save(function (err) {
if (!err) {
// PLACE A
// current_user = get current user from session
// current_user.cars.push(car);
res.send(car);
return next();
} else {
return next(new restify.InternalError(err));
}
});
} else {
return next(new restify.MissingParameterError('ObjectId required.'));
}
});
}
function postCar(req, res, next) {
var car = new Car(req.params);
car.save(function (err, car) {
if (!err) {
// PLACE B
// current_user = get current user from session
// current_user.cars.push(car);
res.send(car);
} else {
return next(err);
}
});
}
app.post('api/car', postCar);
app.put('/api/car', putCar);
}
将诸如伪代码之类的代码放置在位置 A 和位置 B 是否合适?我想到的问题是我需要在 routes/cars.js 文件中使用 User 模型,这使得事情变得不那么模块化。在models/car.js中这样做会更好吗?