如何在Mongoose模式中存储URL值?

Sou*_*rce 3 mongoose mongodb node.js mongoose-schema

我正在将图像从IOS应用程序上传到Firebase,Firebase向我返回包括type URL的元数据URL

是否应该String像下面的代码一样将类型存储在数据库中?或URLs 有特定类型?

var schema = new Schema({
  downloadURL: { type: String, createdDate: Date.now }
})
Run Code Online (Sandbox Code Playgroud)

Viv*_*chi 7

Mongoose 没有 URL 模式,您可以存储在字符串中并使用mongoose-Validator进行验证

这是它的语法

validate: { 
  validator: value => validator.isURL(value, { protocols: ['http','https','ftp'], require_tld: true, require_protocol: true }),
  message: 'Must be a Valid URL' 
}
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助


Mah*_*him 5

嗯,根据文档, Monngoose没有URL的架构类型。您可以只使用带有RegExp的字符串来验证它,也可以使用一些像这样的定制类型

var mongoose = require('mongoose');
require('mongoose-type-url');

var UserSchema = new mongoose.Schema({
url: {
    work: mongoose.SchemaTypes.Url,
    profile: mongoose.SchemaTypes.Url
}
});
Run Code Online (Sandbox Code Playgroud)


Nad*_*nge 5

您可以使用正则表达式来验证这样的 URL,

const mongoose = require('mongoose');

var userSchema = new mongoose.Schema({
    downloadURL: {
        type: String,
        required: 'URL can\'t be empty',
        unique: true
    },
    description: {
        type: String,
        required: 'Description can\'t be empty',
    }
});

userSchema.path('downloadURL').validate((val) => {
    urlRegex = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/;
    return urlRegex.test(val);
}, 'Invalid URL.');
Run Code Online (Sandbox Code Playgroud)