Плохой запрос в nodejs
Я использовал passportjs и passport-local-mongoose для создания регистрации пользователя. Это мой код
var express =require("express"),
app =express(),
bodyParser =require("body-parser"),
passport =require("passport"),
LocalStrategy =require("passport-local"),
User =require("./models/user"),
mongoose =require("mongoose"),
exphbs =require("express-handlebars");
mongoose.connect("mongodb://localhost/lone");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
var hbs = exphbs.create({
defaultLayout: 'main',
partialsDir: [
'views/partials/'
]
});
app.use(express.static(__dirname +"/public"))
app.engine('handlebars', hbs.engine);
app.set("view engine", "handlebars");
app.use(require("express-session")({
secret:"You are beautiful",
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use(function (req,res,next) {
res.locals.currentUser=req.user;
next();
});
//Auth Routes
app.get("/signup",function(req,res){
res.render("signup");
});
app.get("/",function(req,res){
res.render("home");
});
app.post("/signup",function(req,res,next){
var newUser= new User({username: req.body.userName,name:req.body.firstName,email:req.body.email});
User.register(newUser, req.body.password, function(err,user){
if (err){
console.log(err);
res.redirect("/login")
return next();
}
passport.authenticate("local")(req,res,function(){
res.redirect("/");
return next();
});
})
});
app.get("/login",function(req,res){
res.render("login");
});
app.get("/logout",function(req,res){
req.logout();
res.redirect("/");
});
app.get("/",function (req,res) {
res.render("home");
});
app.listen(3000,function(){
console.log("started");
});
Когда я нажимаю кнопку подтверждения регистрации, я получаю сообщение об ошибке " неверный запрос". и это сообщение, которое я получаю в своей консоли { [UserExistsError: пользователь с указанным именем пользователя уже зарегистрирован] name: 'UserExistsError', сообщение: 'пользователь с данным именем пользователя уже зарегистрирован' }
2 ответа
Нет ничего плохого в вашем коде.
Вы пытаетесь зарегистрировать пользователя, имя пользователя которого уже занято. Вы можете справиться с этим более изящно так:
app.post("/signup",function(req,res,next){
var newUser= new User({username: req.body.userName,name:req.body.firstName,email:req.body.email});
User.register(newUser, req.body.password, function(err,user){
if (err){
console.log(err);
return next(err);
}
passport.authenticate("local", function(_err, user){
if(_err) return next(_err);
res.redirect("/");
return next();
});
})
});
Я получаю ту же ошибку, эта ошибка не от имени пользователя, который уже зарегистрирован. Это потому, что ваш адрес электронной почты уже зарегистрирован в базе данных.