mongoose
、mongodb
、およびを使用する Node アプリで作業していrestify
ます。ルート関数を定義するときに、さまざまなモデルからコードをインポートするのが良い方法かどうかを調べたいと思います。これはかなり簡単な質問です。ガイダンスが必要なだけで、自分でコーディングできます。これを読んでくれてありがとう。
関係を定義する方法は知っていますが、実際の関係をどのように作成すればよいかわかりません。つまり、車が作成されたときに、どのように車を追加するのが最善かということです。
この API を RESTful に保とうとしていることに注意してください。
に格納されている次のスキーマに基づいてリンクする必要がある 2 つのモデルがあります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/...
ごとに異なるファイルがある でモデルを構築します。現時点では、それぞれに 1 行のコードしかありませんが、モデル メソッドを記述する必要がある場合に備えて、独立したファイルとして残しました。
で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 でこれを行う方がよいでしょうか?