我正在尝试制作一个应该具有以下流程的项目。 注册->登录->个人资料创建->秘密页面 我已经实现了注册和登录路线,但是当我为个人资料页面保存数据时,它显示了以上错误。我只能第一次保存数据。我也无法为其他用户保存数据。谢谢。
// This is the route which i am including.
var express = require('express');
var router = express.Router();
var passport = require('passport');
var multer = require('multer');
var mongoose = require('mongoose');
var User = require('../models/user.model.js');
var Profile = require('../models/profile.model.js');
var path = require('path');
// Defining the storage path to the multer
var storage = multer.diskStorage({
destination : 'uploads/',
filename: function(req, file, cb){
cb(null, file.filedname + '-' +Date.now() + path.extname(file.originalname));
},
fileFilter: function(file, cb){
checkFileType(file, cb);
}
});
//
var upload = multer({
storage: storage
});
//The signup route to post the username and password and register in the database
router.post('/signup', function(req, res){
req.body.username
req.body.password
User.register(new User({username : req.body.username}), req.body.password, function(err, user){
if (err) {
console.log(err);
return res.render('signup.ejs');
}
passport.authenticate('local')(req, res, function(){
res.render('profile.ejs');
});
});
});
// The login route to post the username and password and login into the portal
router.post('/login', passport.authenticate('local', {
successRedirect : '/secret',
failureRedirect : '/login'
}), function (req, res) {
// body...
// console.log("Login Working");
});
// The profile route to render the profile page only if logged in
router.get('/profile', isLoggedIn, function(req, res){
res.render('profile.ejs')
});
// The profile route. This route is generating error
router.post('/profile', upload.any(), function(req, res){
console.log(req.body);
var profileDetails = {};
profileDetails.path = req.files[0].path;
profileDetails.originalname = req.files[0].originalname;
profileDetails.name = req.body.profileName;
profileDetails.email = req.body.profileEmail;
Profile.create(profileDetails, function(err){
if (err) {
console.log(err);
}
res.redirect('/missing');
});
});
router.get('/missing', isLoggedIn, function (req, res) {
// body...
res.render('missing.ejs')
})
//The function to check is user is logged in or not
function isLoggedIn(req, res, next){
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login');
}
module.exports = router;
答案 0 :(得分:0)
您收到的错误消息是说已经有一个用户名,其值为null
。这意味着已经有一个没有用户名的用户,而您正在尝试添加另一个用户。
Mongo文档针对这些情况陈述以下内容:
如果文档在唯一索引中没有索引字段的值,则索引将为此文档存储一个空值。由于存在独特的约束,MongoDB将只允许一个缺少索引字段的文档。如果有多个文档的索引字段没有值或缺少索引字段,则索引构建将失败,并出现重复的键错误。
您可以将唯一约束与稀疏索引结合使用以进行过滤 唯一索引中的这些空值,避免出现错误。
要么在注册用户时需要验证是否有真实的用户名,要么需要向集合中添加sparse index。 (这允许您输入多个具有空值的条目,但只会返回具有适当值的条目。)