Как правильно создать новую запись в Sequelize.js ORM? - PullRequest
0 голосов
/ 21 января 2019

Я использую Sequelize.js ORM в моем приложении Node.js.

Когда я пытаюсь создать нового пользователя по /create url, это вызывает у меня ошибку.

Сообщение об ошибке: TypeError: User.create is not a function

Где я допустил ошибку?

models / user.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;
};

маршруты /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;

1 Ответ

0 голосов
/ 21 января 2019

Наконец-то я нашел решение.

configurations.js / PostgreSQL.js:

const Sequelize = require('sequelize');

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

module.exports = sequelize;

models / users.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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...