【问题标题】:Express, Passport and sequelize crash when try to save data尝试保存数据时 Express、Passport 和 sequelize 崩溃
【发布时间】:2020-01-08 00:07:52
【问题描述】:

我基于passport 、Express.js 和 Sequelize 创建了一个简单的 0auth2 服务器。 我想注册用户,并将它们保存到数据库中。 但是当我从 sequelize 调用函数来存储数据时,我的应用程序崩溃了。 我收到 404 条消息,我的用户没有保存到数据库中。 我使用邮递员来完成请求。 如果我评论 add 函数,我的应用程序可以工作

App.js

var express = require('express');
var path = require('path');
var logger = require('morgan');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var app = express();
var cors = require('cors');
const passport = require('passport');
require("./config/passport");
const routes = require("./routes/routes");
const db = require('./config/database');

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

db.sequelize.sync().then(() => {  
});

app.use(passport.initialize());

var corsOptions = { 
allowedHeaders: ['Origin', 'X-Requested-With', 'Content-Type', 'Accept', 'Authorization'],
methods: ['GET', 'OPTIONS', 'POST'],
optionsSuccessStatus: 200,
origin: '*'
 }
app.use(cors(corsOptions));

app.use("/", routes);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
console.log(err) ;
next(err);
});

// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
 res.locals.message = err.message;
 res.locals.error = req.app.get('env') === 'development' ? err : {};

// render the error page
res.status(err.status || 500);
});

module.exports = app;

Route.js

var express = require('express');
var router = express.Router();

const authentication = require ("../controller/authentication");
const auth2 = require("../controller/0auth2");

router.post('/login', authentication.login);
router.post('/register',authentication.register);
module.exports = router;

身份验证.js

module.exports.register = function(req, res) {
passport.authenticate("local-signup", function(err, user, info, email_token) {
if (err) {
  res.status(404).json(err);
  return;
}
if (user)
{
        res.status(200);
    res.json({user : user,
});
    }
    else{
        res.status(200);
    res.json(info);
            }
})(req, res);
};

Passport.js

passport.use('local-signup', new LocalStrategy({
usernameField : 'username',
passwordField : 'password',
passReqToCallback : true
  }, function(req, username, password, done) { 
    Users.add()
    .then(() => {
var newUserMysql = {
     username: username,
     email: req.body.email,
     password: "test"
     };
return done(null, newUserMysql);
});

}) );

查询.js

module.exports = {
 add: function() {
//POST
return Users.create({
username: 'allo',
email: 'allo',
password: 'allo'
})
.then(user => {
 //res.json(user);
console.log("test");
})
.catch(error => { 
console.log("allo");
//res.status(400).send(error);
 })
}
};

模型.js

module.exports = (sequelize, Sequelize) => {

const Model = Sequelize.Model; 

class Users extends Model {}
Users.init({
    username: Sequelize.STRING,
    email: Sequelize.STRING,
    password: Sequelize.STRING,
    permission: Sequelize.INTEGER,
    isActive: Sequelize.BOOLEAN
}, { sequelize, modelName: 'users' });
}

数据库.js

const env = require('./env');

const Sequelize = require('sequelize'); 

const sequelize = new Sequelize(env.database, env.username,    env.password, { 
 host: env.host,
dialect: env.dialect,
pool: {
max: env.max,
min: env.pool.min,
acquire: env.pool.acquire,
idle: env.pool.idle
}
});
const db = {}; 
db.Sequelize = Sequelize;
db.sequelize = sequelize;
db.users = require("./models/users"). (sequelize, Sequelize);
    db.clients = require("./models/clients.js")(sequelize, Sequelize); 

module.exports = db;

知道有什么问题吗?

【问题讨论】:

    标签: node.js express sequelize.js passport.js


    【解决方案1】:

    你可以检查一下

    var User = require('./models/user');
    
    app.use(require("express-session")({
      secret:"THIS IS SECRET",
      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();
    }); 
    
    app.get("/register",function(req,res){
      res.render("register");
    });
    
    app.post("/register",function(req,res){
      var newUser  = new User({username:req.body.username,email:req.body.email});
      var password = req.body.password; 
    
      User.register(newUser, password, function(err, user){
        if(err){
          console.log(err);
    
        } else{
           passport.authenticate("local")(req, res, function(){
           res.redirect("/");
        });
        }
      });
    });
    
    
    
    ///////////////////////////log in/////////////////////////////////
    app.get("/login",function(req,res){
      res.render("login");
    });
    
    app.post("/login", passport.authenticate("local",{
      successRedirect:"/",
      failureRedirect:"/login"
    }), function(req,res){
    });
    

    用户模型

    var mongoose = require('mongoose');
    var passportLocalMongoose = require('passport-local-mongoose');
     var UserSchema = new mongoose.Schema({
       username:String,
       password:String,
       email: {type: String, unique: true, required: true},
    
     });
    
    UserSchema.plugin(passportLocalMongoose);
    module.exports = mongoose.model("User",UserSchema);
    

    【讨论】:

    • 我尝试User.register(newUser, password, function(err, user){ if(err){ console.log(err); } else{ passport.authenticate("local")(req, res, function(){ res.redirect("/"); });,但仍有问题
    • 您是否使用正文解析器获取输入值? var newUser = new User({username:req.body.username,email:req.body.email}); var password = req.body.password; 首先你必须创建新用户。检查我的/register 它将创建新用户。如果用户已经创建,那么 /login 函数如果一切正常,它将创建并重定向
    • 仅供开发使用。这个问题来自sequelize。当我成功调用 sequelize 函数时,我用参数改进了函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    相关资源
    最近更新 更多