【发布时间】: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