如何正确创建新条目在 Sequelize.js ORM



我在 Node.js 应用程序中使用 Sequelize.js ORM。

当我尝试通过/create url 创建新用户时,它会引发错误。

错误消息:TypeError: User.create is not a function

我哪里做错了?

型号/用户.js

'use strict';
const bcrypt = require('bcrypt-nodejs');
module.exports = (sequelize, DataTypes) => {
    const User = sequelize.define('User', {
        email: DataTypes.STRING,
        password: DataTypes.STRING,
        first_name: DataTypes.STRING,
        end_name: DataTypes.STRING,
        active: DataTypes.BOOLEAN,
        admin: DataTypes.BOOLEAN
    }, {
        timestamps: false,
        createdAt: false,
        updatedAt: false,
    });
    User.beforeSave((user) => {
        if (user.changed('password')) {
            user.password = bcrypt.hashSync(user.password, bcrypt.genSaltSync(10), null);
        }
    });
    User.prototype.comparePassword = function (password, cb) {
        bcrypt.compare(password, this.password, function (err, isMatch) {
            if (err) {
                return cb(err);
            }
            cb(null, isMatch);
        });
    };
    return User;
};

路由/用户.js:

const express = require('express');
const router = express.Router();
const User = require('../models/user');
router.post('/create', function(req, res) {
    console.log(req.body);
    if (!req.body.email || !req.body.password) {
        res.status(400).send({
            msg: 'Please enter email and password.'
        });
    } else {
        User.create({
            email: req.body.email,
            password: req.body.password,
            first_name: req.body.first_name,
            last_name: req.body.last_name,
            active: req.body.active,
            admin: req.body.admin
        }).then((user) => res.status(201).send(user)).catch((error) => {
            console.log(error);
            res.status(400).send(error);
        });
    }
});
module.exports = router;

最后,我找到了解决方案。

configuration.js/PostgreSQL.js:

const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'user', 'password', {
    host: 'host',
    dialect: 'postgres'
});
module.exports = sequelize;

型号/用户.js:

const sequelize = require('../configurations/PostgreSQL');
const bcrypt = require('bcrypt-nodejs');
const users = sequelize.define('users', {
    email: sequelize.Sequelize.STRING,
    password: sequelize.Sequelize.STRING,
    first_name: sequelize.Sequelize.STRING,
    last_name: sequelize.Sequelize.STRING,
    active: sequelize.Sequelize.BOOLEAN,
    admin: sequelize.Sequelize.BOOLEAN
}, {
    timestamps: false,
    createdAt: false,
    updatedAt: false,
});
users.beforeSave((user) => {
    if (user.changed('password')) {
        user.password = bcrypt.hashSync(user.password, bcrypt.genSaltSync(10), null);
    }
});
users.prototype.comparePassword = function (password, cb) {
    bcrypt.compare(password, this.password, function (err, isMatch) {
        if (err) {
            return cb(err);
        }
        cb(null, isMatch);
    });
};
module.exports = users;

路由/用户.js:

const express = require('express');
const router = express.Router();
const passport = require('passport');
require('../configurations/password')(passport);
const users = require('../models/users');
router.post('/create', function(req, res) {
    if (!req.body.email || !req.body.password) {
        res.status(400).send({
            status: false,
            message: ''
        });
    } else {
        users.create({
            email: req.body.email,
            password: req.body.password,
            first_name: req.body.first_name,
            last_name: req.body.last_name,
            active: req.body.active,
            admin: req.body.admin
        }).then((user) => res.status(201).send(user)).catch((error) => {
            console.log(error);
            res.status(400).send(error);
        });
    }
});
module.exports = router;

最新更新