簡體   English   中英

在預中間件中未定義的貓鼬模型

[英]Mongoose Model Undefined in Pre Middleware

我正在嘗試構建一個像bitbit一樣充當URL縮短器的應用程序。 但是,我遇到了麻煩,非常感謝您的幫助。 我當時正在用Mocha測試我的Link模型,並且在我的中間件前功能之一中遇到錯誤。 在此函數中,我嘗試獲取所有具有與我剛生成的URL匹配的縮短URL的條目的計數,以使我不會在縮短的鏈接上加倍。 為了做到這一點,我試圖在模型上調用Mongoose的count函數,但是我得到了TypeError:“無法讀取未定義的屬性'count'”。 我試圖搜索為什么會發生這種情況,但無法提出任何建議。

如果您可以幫助我弄清楚為什么會這樣,或者生成縮短鏈接的更好方法是什么,我將不勝感激。 謝謝!

您可以在下面找到我的Link模型的代碼:

'use strict';

let mongoose = require('mongoose'),
    config = require('../../config/config'),
    schema = mongoose.Schema;

let LinkSchema = new schema({
    originalLink: {
        type: String,
        trim: true,
        validate: [
            function(link) {
                let urlReg = new RegExp("(http|ftp|https)://[\w-]+" +
                    "(\.[\w-]+)+([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?");
                return urlReg.test(link);
            }, 'The URL entered is not valid'
        ],
        required: 'URL to shorten is required'
    },
    shortenedLink: String
});

LinkSchema.pre('save', function(next) {
    let shortLink;
    let count;
    while (true) {
        console.log(`slink: ${shortLink}, count: ${count}`);
        shortLink = this.generateShortenedLink(this.originalLink);
        mongoose.model['Link'].count({shortenedLink : shortLink}, (err, n) => {
            if (err) {
                console.log(err);
                next();
            }
            count = n;
        });
        if (count === 0) {
            break;
        }
    }

    this.shortenedLink = shortLink;

    next();
});

LinkSchema.methods.generateShortenedLink = function(link) {
    let text = "";
    let possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    for (let i = 0; i < 8; i++ )
        text += possible.charAt(Math.floor(Math.random() * possible.length));

    return config.appUrl + text;
};

mongoose.model('Link', LinkSchema);

mongoose.model是一個函數,您就像在使用它一樣是一個對象。

嘗試以下方法:

mongoose.model('Link').count(...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM