Я в том случае, когда функция может выполнять поиск по различным полям в зависимости от ситуации.Определение методов модели мануата Динамически
Он возвращает тот же набор данных, он просто ищет различные поля: либо userId, либо tagId. Таким образом, в моем коде у меня есть что-то вроде этого:
var findByMethod;
if (searchBy === 'userId') {
findByMethod = UserArticleModel.findByUser;
}
else {
findByMethod = UserArticleModel.findByTag;
}
findByMethod(idToSearch, function (err, articles) {…});
findByUser
и findByTag
являются статические методы, определенные в UserArticleModel.js
UserArticleModel.js
var mongoose = require('mongoose');
var userArticleSchema = new mongoose.Schema({
…
}
});
userArticleSchema.statics.findByUser = function (userId, callback) {
this.find({userId: userId}, function() {…});
};
userArticleSchema.statics.findByTag = function (tagId, callback) {…};
module.exports = mongoose.model('UserArticle', userArticleSchema);
Назад в мой контроллер, когда я делаю:
UserArticleModel.findByTag(idToSearch, function (err, articles) {…});
Все хорошо, и все идет хорошо. Но когда я динамически вызвать метод с помощью моей переменной:
findByMethod(idToSearch, function (err, articles) {…});
дела идут не так, как узел возвращает ошибку:
DOMAINE ERROR CAUGHT: TypeError: Object #<Object> has no method 'find'
Я подозреваю, this
не следует обязательность для правильной рамки, но я не» я действительно понимаю, почему findByMethod === UserArticleModel.findByUser // true
Хорошо, проблема заключается в том, как вы реализуете код для их создания, что также не та часть, которую вы показываете. Но в качестве базового принципа, чтобы установить их, вы, в основном, «циклично выполняете» поля, присутствующие в схеме, и называете: userArticleSchema.statics [fieldName] = function (arg, callback) {var query = {}; query [fieldName] = arg; this.findOne (query, function (err, doc) {... 'и т. д. Где вы должны получить общий смысл. Все JavaScript - это просто объекты. –
Если это не опечатка в вопросе, тогда' userArticleSchema.staticsfindByTag' является вашим реальная проблема «опечатки», когда вы забыли точку ».« –
Это была опечатка в вопросе, я исправил ее. thx – Buzut