gpt4 book ai didi

javascript - 如何验证 mongoose 和 node.js 上的 db.collections.insertOne 输入

转载 作者:行者123 更新时间:2023-12-01 01:34:29 24 4
gpt4 key购买 nike

我有一个问题。我是 node.js 和 mongoDB (使用 mongoose)的新手。在 MySQL 中,当我定义了一个包含必填字段的表时,数据库将拒绝接受不符合模型规则的输入。我注意到,在 mongoDB 中,至少按照我的设置方式,情况并非如此。

我在 blog-schema.js 中定义了以下模型:

const mongoose = require('mongoose');

var Schema = mongoose.Schema;

var userSchema = mongoose.Schema({
title: {
type:String,
required: true,
},
author: {
type: String,
required: true,
},
category: {
type: String,
required: true,
},
text: {
type: String,
required: true,
},
date: {
type: Date,
default: Date.now,
},
})

module.exports = mongoose.model('BlogPost', userSchema, 'blog');

在此,我为除 date 之外的所有字段设置了 required:true。然后我在 conn.js 中实现了这个:

const mongoose = require('mongoose')
, BlogPost = require('./schemata/blog-schema')
, db_config = require('./config')
, uri = 'mongodb://' + db_config.user + ":" + db_config.password + "@" + db_config.host + db_config.database;

DataFunctions = function (){

mongoose.connect(uri, db_config.opts);

mongoose.Promise = global.Promise;

this.connections = {};
this.schemas = {};

this.schemas.BlogPost = BlogPost;

this.connections.db = mongoose.connection;
};

DataFunctions.prototype.insert = function(data = {}, callback = null) {
var schema = this.schemas.BlogPost;

this.connections.db.on('error', console.error.bind(console, 'connection error'));
this.connections.db.once('open', function(dataStructure = schema) {
this.items = data;


if (callback != null) {
dataStructure.collection.insertOne(this.items, callback);
mongoose.connection.close();
}
else {
dataStructure.collection.insertOne(this.items, function(err, docs) {
if (err) throw err;
});
mongoose.connection.close();
}

});

mongoose.connection.close();
}

DataFunctions.prototype.retrieve = function(params = {}, columns = '', callback = null) {
var schema = this.schemas.BlogPost;

this.connections.db.on('error', console.error.bind(console, 'connection error'));
this.connections.db.once('open', function(dataStructure = schema) {

if (callback != null) {
dataStructure.find(params, columns, callback);
}
else {
dataStructure.find(params, columns, function(err, data) {
if (err) throw err;
});

}
});


}


module.exports = DataFunctions;

但是,当我执行插入函数时,即使标记为 required 的字段留空,它也会毫无错误地接受它。我非常感谢您在解决如何验证插入 mongoDB 集合中的数据方面提供的任何帮助。

我使用的是mongoos版本5.3.6和mongoDB版本4.0.3

谢谢。

编辑感谢所有回复的人,根据下面的一些评论,我将 dataStructure.collection.insertOne() 更改为 dataStructure.create(),其中似乎包含验证。

最佳答案

您需要在提交时或提交之前添加验证。当表单有错误时,它实际上是无效的,因此在提交之前检查它是否无效。

说实话,你的代码看起来有点冗长、复杂和困惑。你这样做有什么理由吗?例如,您正在使用 Mongoose 模式,但实际上并未使用 Mongoose 方法提交,这就是为什么没有发生任何验证的原因。 insertOne 不是 Mongoose 方法,并且您没有使用模型来保存条目。它将是 model.save(data)

也可以直接保存,无需再次调用模式,只需声明一个新变量即可。

const post = new BlogPost(data); post.save().then(console.log).catch(console.log);


//also mongoose.connect already returns a promise

mongoose
.connect(
dbUrl,
{ useNewUrlParser: true }
)
.then(() => console.log("Connected"))
.catch(error => console.log("Failed " + error));

关于javascript - 如何验证 mongoose 和 node.js 上的 db.collections.insertOne 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52952422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com