модуль реэкспорта (mongoose) в nodejs / commonjs с использованием coffeescript (zappa) - PullRequest
1 голос
/ 01 сентября 2011

Я использую mongoose@2.0.4, и я подумал о том, чтобы аккуратно абстрагировать вызов mongoose.connect() в модуле.

Итак, используя nodejs, я ожидал, что сработает следующее:
В myMongoose.coffee:

mongoose = require 'mongoose'
mongoose.connect 'mongodb://localhost/test'
@exports = mongoose

и использовать его в: MyModel.coffee

mongoose = require 'myMongoose'
console.log mongoose #Prints massive object (including Schema)
Schema = mongoose.Schema
console.log Schema # undefined

Зачем обращаться к подэлементу (технически функция конструктора, ядумаю) вроде схема не работает?Даже добавление @exports.Schema = mongoose.Schema в myMongoose.coffee ничего не исправит.

Ответы [ 2 ]

6 голосов
/ 01 сентября 2011

Вы должны установить

module.exports = mongoose

Вы не можете перезаписать exports новым объектом.Вы можете добавлять свойства только к exports.

. Это потому, что ваш модуль на самом деле следующий:

(function(require, module, exports, process) {
  // your code
})();

exports - это просто параметр, переназначение которого ничего не дает.

Поэтому, если вы хотите перезаписать экспорт, используйте module.exports.Если вы хотите расширить exports, используйте exports.Foo

Однако, если вы перезаписываете module.exports, то безопаснее продолжить запись в module.exports вместо exports

1 голос
/ 01 сентября 2011

+ 1 к ответу Райноса, но есть кое-что еще, что вы должны знать:

@ is exports  # true!

Поэтому, когда вы пишете @exports = mongoose, это эквивалентно exports.exports = mongoose!

Этовероятно, @ будет более интуитивно понятным указывать на module, но тогда удобно иметь возможность экспортировать кучу вещей с помощью @, особенно если вы хотите запустить тот же код в браузере (где @ будет указывать на window, и вы будете весело заполнять глобальную область видимости).

...