16

2つのアプリがあり、それぞれが異なるフォルダーにあり、同じモデルを共有する必要があります。

アプリAのmodelsフォルダーをアプリBのmodelsフォルダーにシンボリックリンクしたいと思います。

アプリAでmongoose.model('Model'、Schema)を呼び出すと、そのアプリのmongoose/mongodb接続に「関連付けられている」という問題が発生しています。

これを管理するための最良の方法に関するヒントはありますか?

4

6 に答える 6

10

このようなことを使用して、マングースインスタンスを共有しています

var mongoose = require('mongoose');
module.exports.mongoose = mongoose;

var user = require('./lib/user');

「lib/user.js」の中に

var mongoose = module.parent.mongoose;
var model = mongoose.model('User', new mongoose.Schema({ ... });
module.exports = model;

したがって、他のアプリケーションで「lib/user.js」を要求できるようにする

于 2012-10-11T19:17:54.427 に答える
5

私がここでやったのは、app2 のサブモジュール (Git を使用) として app1 をインポートすることでした。このようにして、モデルを通常どおりインポートし、アプリのデフォルトmongoose接続に関連付けることができます。

于 2012-11-26T14:39:16.237 に答える
2

1 つのアプローチは、スキーマを単純な JavaScript オブジェクトに抽象化し、そのオブジェクトをインポートして、アプリ内でモデルを構築するために使用することです。

たとえば、「製品」スキーマの場合:

www/app1/ProductConfig.js

const ProductConfig = {
  name: String,
  cost: Number
}
module.exports = ProductConfig;

www/app1/ProductSchema.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ProductConfig = require('./ProductConfig');

const Product = new Schema(Product);

module.exports = mongoose.model('Product', Product);

www/app2/ProductSchema.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ProductConfig = require('../app1/ProductConfig');

const Product = new Schema(Product);

module.exports = mongoose.model('Product', Product);
于 2018-01-18T09:50:24.323 に答える
0
./shared/models/user.js

./app1/app.js
var user = require('../shared/user.js');

./app2/app.js
var user = require('../shared/user.js');

共有パスからモデルをロードできなかった理由がわかりません。

于 2012-09-28T01:19:17.420 に答える
-2

他の NPM パッケージ間で Mongoose パッケージを再利用する場合、最上位アプリに共有パッケージをインストールし、それを使用して他の NPM パッケージを初期化するのが最善の方法です。

この npm モジュールを使用できます: https://www.npmjs.com/package/mongoose-global

于 2017-08-07T08:47:43.680 に答える