【问题标题】:User.create not a function sequelizeUser.create 不是函数 sequelize
【发布时间】: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

我需要这方面的帮助。欣赏

【问题讨论】:

  • 为什么awaitthen(...) 的奇怪组合?如果您使用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


【解决方案1】:

当您使用 sequelize CLI sequelize-cli model:generate --name User 生成模型时,您应该从 models 文件夹中的 index.js 文件中导入它们

const db = require('../models');
db.User.create({})

【讨论】:

    猜你喜欢
    • 2021-12-04
    • 2020-04-08
    • 2018-07-30
    • 2017-04-24
    • 2019-11-17
    • 2021-07-27
    • 1970-01-01
    • 2020-12-01
    • 2020-02-04
    相关资源
    最近更新 更多