3

express.js + mongoose(github:https ://github.com/dreamerslab/express-todo-example )を使用したこの簡単なto-doアプリの例を見ています。db.jsファイルでは、スキーマを定義し、mongodbに接続します。

var mongoose = require( 'mongoose' );
var Schema   = mongoose.Schema;
var Todo = new Schema({
user_id    : String,
content    : String,
updated_at : Date
});
mongoose.model( 'Todo', Todo );
mongoose.connect( 'mongodb://localhost/express-todo' );

しかし、それは何もエクスポートしません。しかし、app。のファイルでは、db.jsファイルは次のように必要です。

// mongoose setup
require( './db' );

変数に割り当てずに。

だからここに私が理解していない部分があります:/routes/index.jsファイルでは、このようなマングースを要求するだけでモデルとスキーマを使用できます

var mongoose = require( 'mongoose' );
var Todo     = mongoose.model( 'Todo' );
Todo.find(...)
...

では、index.jsは、マングースインスタンスが渡されないが、そこで再必要とされるため、Todoモデルで何が行われるかをどのように把握するのでしょうか。

さらに、スキーマを別のファイルに分割する場合、たとえばtodo.js、user.jsなどを使用して、構造を設定する適切な方法は何ですか。作成する前に、db.jsのスキーマファイルが必要なだけです。繋がり?

前もって感謝します!

ToDoアプリの構造:

todo
|-- node_modules
|   |-- ejs
|   |-- express
|   `-- mongoose
|
|-- public
|   |-- images
|   |-- javascripts
|   `-- stylesheets
|       |-- style.css
|
|-- routes
|   `-- index.js
|
|-- views
|   |-- index.ejs
|   `-- layout.ejs
|
|-- .gitignore
|
|-- app.js
|
`-- package.json
4

1 に答える 1

3
// mongoose setup
require( './db' );

このコードにより、db.jsモジュールが実行されるだけで、この場合に必要なのはこれだけです。ほとんどのモジュールは何かをエクスポートしますが、この場合、トップレベルのコードを実行するだけでよいので、何もエクスポートする必要はありません。

mongooseを使用して、あるファイルでモデルを定義し、別のファイルでそれらを使用する方法については、。の場合にシングルトンインスタンスを返すというやや洗練されたアプローチを使用しますrequired次のコード行を参照してください。

module.exports = exports = new Mongoose;

つまり、返されるのは、定義されたすべてのモデルを追跡する状態を持つrequire('mongoose')、グローバルに共有されたインスタンスです。Mongoose私の意見では少し「魔法」ですが、それがどのように機能するかです。Mongooseそのパターンを避けたい場合は、独自のインスタンスを作成することもできます。

于 2012-09-13T00:08:56.083 に答える