【发布时间】:2013-07-12 21:31:19
【问题描述】:
我正在开发一个使用 mongoose、mongodb 和 restify 的 Node 应用程序。我想了解在定义路由函数时从各种模型中导入代码是否是一种好习惯。这应该是一个相当简单的问题,我只需要指导,我就能自己编写代码。感谢您抽时间阅读。
我知道如何定义这种关系,但我不确定我应该如何建立实际的关系。也就是说,换句话说,在创建汽车时,将汽车添加到其中的最佳方式是什么。
请注意,我正在尝试保持此 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中这样做会更好吗?
【问题讨论】:
-
我实际上既不会说 model.js 也不会说 routes/car.js。我会有一个文件来处理模型的实际保存、更新、添加等。为什么不把它放在路由中?好吧,这与路由无关,路由是用来获取请求并传递响应的,它不关心如何实际处理数据。
标签: node.js mongodb rest mongoose restify