gpt4 book ai didi

node.js - 验证 Mongoose Schema 和显示自定义错误消息的最佳实践

转载 作者:可可西里 更新时间:2023-11-01 09:06:25 24 4
gpt4 key购买 nike

我已经开始学习 Node.js,但让我有点困惑的一件事是架构验证。

验证数据并向用户显示自定义错误消息的最佳做法是什么?

假设我们有这个简单的架构:

var mongoose = require("mongoose");

// create instance of Schema
var Schema = mongoose.Schema;

// create schema
var Schema = {
"email" : { type: String, unique: true },
"password" : String,
"created_at" : Date,
"updated_at" : Date
};

// Create model if it doesn't exist.
module.exports = mongoose.model('User', Schema);

我希望注册用户具有唯一的电子邮件地址,因此我已将 unique: true 添加到我的架构中。现在,如果我想向用户显示错误消息,说明他为什么没有注册,我会收到类似这样的响应:

    "code": 11000,
"index": 0,
"errmsg": "E11000 duplicate key error index: my_db.users.$email_1 dup key: { : \"test@test.com\" }",
"op": {
"password": "xxx",
"email": "test@test.com",
"_id": "56895e48c978d4a10f35666a",
"__v": 0
}

这有点乱,我想像这样显示发送给客户端:

"status": {
"text": "Email test@test.com is already taken.",
"code": 400
}

如何实现?

最佳答案

const mongoose = require('mongoose')
const Schema = mongoose.Schema
const { hash } = require('../helpers/bcrypt')

const userSchema = new Schema({

email: {
type: String,
required: [true, 'email is required'],
match: [/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/, 'Invalid email format'],
validate: {
validator: function(v){
return this.model('User').findOne({ email: v }).then(user => !user)
},
message: props => `${props.value} is already used by another user`
},
},
password: {
type: String,
required: [true, 'password is required']
}

})

userSchema.pre('save', function(done){
this.password = hash(this.password)
done()
})


module.exports = mongoose.model('User', userSchema)

关于node.js - 验证 Mongoose Schema 和显示自定义错误消息的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34579837/

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