#javascript #node.js #mongodb #mongoose
#язык JavaScript #node.js #mongodb #мангуст
Вопрос:
Я пытаюсь создать страницу входа в систему и отправить информацию в базу данных Mongodb. Но я сталкиваюсь с ошибкой ссылки и понятия не имею, почему. Моя схема Мангуста выглядит следующим образом:
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var validateEmail = function(email) { var re = /^w ([.-]?w )*@w ([.-]?w )*(.w{2,3}) $/; return re.test(email) }; var userSchema = new Schema({ full_name: { type: String, required: [true, 'Full name must be provided'] }, email: { type: String, Required: 'Email address cannot be left blank.', validate: [validateEmail, 'Please fill a valid email address'], match: [/^w ([.-]?w )*@w ([.-]?w )*(.w{2,3}) $/, 'Please fill a valid email address'], index: {unique: true, dropDups: true} }, password: { type: String , required: [true, 'Password cannot be left blank']}, dob: { type: Date , required: [true, 'Date of birth must be provided']}, country: { type: String , required: [true, 'Country cannot be left blank.']}, gender: { type: String , required: [true, 'Gender must be provided']}, }); module.exports = mongoose.model('Users', userSchema);
Когда я пытаюсь запустить следующий код, я получаю сообщение:
**var Пользователь = мангуст.модель(«Пользователи», UserSchema);
Ошибка ссылки: параметр UserSchema не определен**
var mongoose = require('mongoose'); var crypto = require('crypto'), hmac, signature; const { check, validationResult } = require('express-validator/check'); const { matchedData, sanitize } = require('express-validator/filter'); var User = mongoose.model('Users', userSchema); /* POST user registration page. */ router.post('/register',[ check('full_name','Name cannot be left blank') .isLength({ min: 1 }), check('email') .isEmail().withMessage('Please enter a valid email address') .trim() .normalizeEmail() .custom(value =gt; { return findUserByEmail(value).then(User =gt; { //if user email already exists throw an error }) }), check('password') .isLength({ min: 5 }).withMessage('Password must be at least 5 chars long') .matches(/d/).withMessage('Password must contain one number') .custom((value,{req, loc, path}) =gt; { if (value !== req.body.cpassword) { // throw error if passwords do not match throw new Error("Passwords don't match"); } else { return value; } }), check('gender','Please select gender') .isLength({ min: 1 }), check('dob','Date of birth cannot be left blank') .isLength({ min: 1 }), check('country','Country cannot be left blank') .isLength({ min: 1 }), check('terms','Please accept our terms and conditions').equals('yes'), ], function(req, res, next) { const errors = validationResult(req); if (!errors.isEmpty()) { res.json({status : "error", message : errors.array()}); } else { hmac = crypto.createHmac("sha1", 'auth secret'); var encpassword = ''; if(req.body.password){ hmac.update(req.body.password); encpassword = hmac.digest("hex"); } var document = { full_name: req.body.full_name, email: req.body.email, password: encpassword, dob: req.body.dob, country: req.body.country, gender: req.body.gender, calorie: req.body.calorie, salt: req.body.salt }; var user = new User(document); user.save(function(error){ console.log(user); if(error){ throw error; } res.json({message : "Data saved successfully.", status : "success"}); }); } }); function findUserByEmail(email){ if(email){ return new Promise((resolve, reject) =gt; { User.findOne({ email: email }) .exec((err, doc) =gt; { if (err) return reject(err) if (doc) return reject(new Error('This email already exists. Please enter another email.')) else return resolve(email) }) }) } } module.exports = router;``` Any ideas why the schema can't be found. (Im new to node.js and webframeworks)
Комментарии:
1. Потому
userSchema
что не определено в вашем втором файле. Почему вы воссоздаетеUser
модель в другом файле?2. Потому что я не смогу создавать новых пользователей, если я этого не сделаю
3. Вам требовался этот файл схемы?