【发布时间】:2020-05-22 23:40:19
【问题描述】:
我刚开始使用 express js。我想在用户表中插入数据库。 我使用了 sequelize model:generate 来创建用户模型。就是这个
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
name: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Users');
}
};
这是生成的模型
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
name: DataTypes.STRING,
username: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING
});
User.associate = function(models) {
// associations can be defined here
};
return User;
};
然后我有一个控制器,我有一个注册方法。
const Validator = require('validatorjs');
const bcrypt = require('bcrypt');
const privateKey = require('../config.json').secretKey;
const saltRounds = require('../config.json').saltRounds;
const User = require('../models/user');
exports.register = async (req, res, next) => {
rules = {
username: 'required|string|max:255|alpha_num',
email: 'required|email',
password: 'required|string|max:255',
name: 'required',
}
const validation = new Validator(req.body, rules);
if(validation.passes()){
let password = await bcrypt.hash(req.body.password, saltRounds);
User.create({
username: req.body.username,
password: password,
name: req.body.name,
email: req.body.email,
}).then(response => {
return res.status(200).json(response);
}).catch(err => {
return res.status(500).json(err);
});
}else{
return res.status(422).json(validation.errors);
}
}
但我收到一条错误消息,提示 User.create 不是函数。 这是我的文件结构here
我需要这方面的帮助。欣赏
【问题讨论】:
-
为什么
await和then(...)的奇怪组合?如果您使用async函数,请使用await!同样,如果您的第一个if (user === null)成功,那么它将return意味着不需要else,这是隐含的,因此您可以通过将其提升为if { ... }下方的常规代码来取消缩进 -
您已经导出了一个您需要使用
const User = require('../models/user');的函数。但看起来这个函数需要用 2 个参数调用才能返回实际的User模型,然后您可以调用.create和.findOne等。我建议发布minimal reproducible example--这个问题可以通过消除很多基本上与您所询问的问题无关的噪音来改善。谢谢。
标签: javascript mysql node.js sequelize.js