Node.js 使用mongoose进行表单验证
我的用例:Node.js 使用mongoose进行表单验证,node.js,mongodb,validation,express,mongoose,Node.js,Mongodb,Validation,Express,Mongoose,我的用例: function checkSignup(req, res, next) { var formField = req.params.field var expectedFormFields = ["username", "emailAddress", "password"] // Check if it's an expected field if(!expectedFormFields.includes(formField)) re
function checkSignup(req, res, next) {
var formField = req.params.field
var expectedFormFields = ["username", "emailAddress", "password"]
// Check if it's an expected field
if(!expectedFormFields.includes(formField))
res.status(403).send('Invalid request')
if(formField == 'username') {
var user = User.findOne({'local.username': req.body.value}, function (err, user) {
if(err)
res.status(403).send('Invalid request')
if(user)
res.status(409).send('Username is already forgiven')
res.status(200).send()
})
}
res.status(409).send('Unknown validation check, please contact a staff member')
}
var userSchema = mongoose.Schema({
local: {
username: {
type: String,
required: [true, 'Empty usernames are not allowed'],
validate: usernameValidator
}});
var usernameValidator = [
validate({
validator: 'isLength',
arguments: [3, 50],
message: 'Userame should be between {ARGS[0]} and {ARGS[1]} characters'
}),
validate({
validator: 'isAlphanumeric',
passIfEmpty: false,
message: 'Name should contain alpha-numeric characters only'
})
]
我正在做一个注册页面,我正在向我的服务器发送一个关于用户名的ajax请求。服务器应该检查它是否符合验证规则(例如字母数字),以及用户名是否被原谅或可以自由使用
我的想法:
function checkSignup(req, res, next) {
var formField = req.params.field
var expectedFormFields = ["username", "emailAddress", "password"]
// Check if it's an expected field
if(!expectedFormFields.includes(formField))
res.status(403).send('Invalid request')
if(formField == 'username') {
var user = User.findOne({'local.username': req.body.value}, function (err, user) {
if(err)
res.status(403).send('Invalid request')
if(user)
res.status(409).send('Username is already forgiven')
res.status(200).send()
})
}
res.status(409).send('Unknown validation check, please contact a staff member')
}
var userSchema = mongoose.Schema({
local: {
username: {
type: String,
required: [true, 'Empty usernames are not allowed'],
validate: usernameValidator
}});
var usernameValidator = [
validate({
validator: 'isLength',
arguments: [3, 50],
message: 'Userame should be between {ARGS[0]} and {ARGS[1]} characters'
}),
validate({
validator: 'isAlphanumeric',
passIfEmpty: false,
message: 'Name should contain alpha-numeric characters only'
})
]
我已经在我的mongoose模型上定义了验证规则。为了避免两次定义完全相同的验证规则,我想使用mongoose模式来检查验证规则,如果查询通过,那么它应该尝试在db中查找用户名,以检查它是否仍然可用
问题:
function checkSignup(req, res, next) {
var formField = req.params.field
var expectedFormFields = ["username", "emailAddress", "password"]
// Check if it's an expected field
if(!expectedFormFields.includes(formField))
res.status(403).send('Invalid request')
if(formField == 'username') {
var user = User.findOne({'local.username': req.body.value}, function (err, user) {
if(err)
res.status(403).send('Invalid request')
if(user)
res.status(409).send('Username is already forgiven')
res.status(200).send()
})
}
res.status(409).send('Unknown validation check, please contact a staff member')
}
var userSchema = mongoose.Schema({
local: {
username: {
type: String,
required: [true, 'Empty usernames are not allowed'],
validate: usernameValidator
}});
var usernameValidator = [
validate({
validator: 'isLength',
arguments: [3, 50],
message: 'Userame should be between {ARGS[0]} and {ARGS[1]} characters'
}),
validate({
validator: 'isAlphanumeric',
passIfEmpty: false,
message: 'Name should contain alpha-numeric characters only'
})
]
不幸的是,它似乎没有检查查询的验证(而是在保存之前才检查),因此我不知道如何使用mongoose验证规则来验证用户名输入
我的代码:
function checkSignup(req, res, next) {
var formField = req.params.field
var expectedFormFields = ["username", "emailAddress", "password"]
// Check if it's an expected field
if(!expectedFormFields.includes(formField))
res.status(403).send('Invalid request')
if(formField == 'username') {
var user = User.findOne({'local.username': req.body.value}, function (err, user) {
if(err)
res.status(403).send('Invalid request')
if(user)
res.status(409).send('Username is already forgiven')
res.status(200).send()
})
}
res.status(409).send('Unknown validation check, please contact a staff member')
}
var userSchema = mongoose.Schema({
local: {
username: {
type: String,
required: [true, 'Empty usernames are not allowed'],
validate: usernameValidator
}});
var usernameValidator = [
validate({
validator: 'isLength',
arguments: [3, 50],
message: 'Userame should be between {ARGS[0]} and {ARGS[1]} characters'
}),
validate({
validator: 'isAlphanumeric',
passIfEmpty: false,
message: 'Name should contain alpha-numeric characters only'
})
]
检查注册:
function checkSignup(req, res, next) {
var formField = req.params.field
var expectedFormFields = ["username", "emailAddress", "password"]
// Check if it's an expected field
if(!expectedFormFields.includes(formField))
res.status(403).send('Invalid request')
if(formField == 'username') {
var user = User.findOne({'local.username': req.body.value}, function (err, user) {
if(err)
res.status(403).send('Invalid request')
if(user)
res.status(409).send('Username is already forgiven')
res.status(200).send()
})
}
res.status(409).send('Unknown validation check, please contact a staff member')
}
var userSchema = mongoose.Schema({
local: {
username: {
type: String,
required: [true, 'Empty usernames are not allowed'],
validate: usernameValidator
}});
var usernameValidator = [
validate({
validator: 'isLength',
arguments: [3, 50],
message: 'Userame should be between {ARGS[0]} and {ARGS[1]} characters'
}),
validate({
validator: 'isAlphanumeric',
passIfEmpty: false,
message: 'Name should contain alpha-numeric characters only'
})
]
我的猫鼬模式:
function checkSignup(req, res, next) {
var formField = req.params.field
var expectedFormFields = ["username", "emailAddress", "password"]
// Check if it's an expected field
if(!expectedFormFields.includes(formField))
res.status(403).send('Invalid request')
if(formField == 'username') {
var user = User.findOne({'local.username': req.body.value}, function (err, user) {
if(err)
res.status(403).send('Invalid request')
if(user)
res.status(409).send('Username is already forgiven')
res.status(200).send()
})
}
res.status(409).send('Unknown validation check, please contact a staff member')
}
var userSchema = mongoose.Schema({
local: {
username: {
type: String,
required: [true, 'Empty usernames are not allowed'],
validate: usernameValidator
}});
var usernameValidator = [
validate({
validator: 'isLength',
arguments: [3, 50],
message: 'Userame should be between {ARGS[0]} and {ARGS[1]} characters'
}),
validate({
validator: 'isAlphanumeric',
passIfEmpty: false,
message: 'Name should contain alpha-numeric characters only'
})
]
用户名验证程序:
function checkSignup(req, res, next) {
var formField = req.params.field
var expectedFormFields = ["username", "emailAddress", "password"]
// Check if it's an expected field
if(!expectedFormFields.includes(formField))
res.status(403).send('Invalid request')
if(formField == 'username') {
var user = User.findOne({'local.username': req.body.value}, function (err, user) {
if(err)
res.status(403).send('Invalid request')
if(user)
res.status(409).send('Username is already forgiven')
res.status(200).send()
})
}
res.status(409).send('Unknown validation check, please contact a staff member')
}
var userSchema = mongoose.Schema({
local: {
username: {
type: String,
required: [true, 'Empty usernames are not allowed'],
validate: usernameValidator
}});
var usernameValidator = [
validate({
validator: 'isLength',
arguments: [3, 50],
message: 'Userame should be between {ARGS[0]} and {ARGS[1]} characters'
}),
validate({
validator: 'isAlphanumeric',
passIfEmpty: false,
message: 'Name should contain alpha-numeric characters only'
})
]
您在
checkSignup
功能中遇到了一个大问题:您多次返回响应。每次返回响应时,请尝试在每个res.status…
前面添加return
语句,以确保不会多次发送响应。这将抛出一个异常。感谢您指出,修复了:-)。我现在有相同的问题。想知道是否有任何方法可以使用mongoose模式进行前端验证。您在checkSignup
函数中遇到了一个大问题:您多次返回响应。每次返回响应时,请尝试在每个res.status…
前面添加return
语句,以确保不会多次发送响应。这将抛出一个异常。感谢您指出,修复了:-)。我现在有相同的问题。想知道是否有任何方法可以使用mongoose模式进行前端验证。