findOne это не функция - PullRequest
       3

findOne это не функция

0 голосов
/ 05 марта 2019

Я пытаюсь создать модель, используя Sequelize и mysql db. Я пытаюсь опубликовать в '/ Students / Register', она продолжает выдавать ошибку, говоря, что findOne не является функцией. Я попытался потребовать мой sql, но он не работает .. Я также попробовал другую функцию, такую ​​как findAll, и все еще не работает. В чем проблема

const Sequelize = require('sequelize');
module.exports = function (sequelize, Sequelize) {
    const Stundet = sequelize.define(
        'student', {
            id: {
                type: Sequelize.INTEGER,
                primaryKey: true,
                autoIncrement: true
            },
            name: {
                type: Sequelize.STRING
            },
            email: {
                type: Sequelize.STRING
            },
            password: {
                type: Sequelize.STRING
            },
            created: {
                type: Sequelize.DATE,
                defaultValue: Sequelize.NOW
            }
        }, {
            timestamps: false
        });
    module.exports = Stundet;

}

маршруты * * 1004

const Student_Info = require("../models/students")

student.post('/register', (req, res) => {
    const dataToday = new Date()
    const studentData = {
        name: req.body.name,
        email: req.body.email,
        password: req.body.password,
        created: dataToday
    }
    Student_Info.findOne({
            where: {
                email: req.body.email
            }
        })
        .then(student => {
            if (!student) {
                bcrypt.hash(req.body.password, 10, (err, hash) => {
                    studentData.password = hash
                    Student_Info.create(studentData)
                        .then(student => {
                            res.json({
                                status: student.email + 'registered'
                            })
                        })
                        .catch(err => {
                            res.send('error' + err)
                        })
                })

            } else {
                res.json({
                    error: 'Student already registered'
                })
            }
        })
        .catch(err => {
            res.send('error' + err)
        })
})
module.exports = student;

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Когда вы используете module.exports, вы должны вернуть Stundet. Вы уже экспортируете всю функцию. И я думаю, что вы должны передать DataTypes вместо Sequelize.

Примерно так:

module.exports = function (sequelize, DataTypes) {
    const Stundet = sequelize.define(
        //...
    return Stundet;

}

Итак, в вашем маршруте для использования вашей модели:

const Sequelize = require('sequelize');
const DataTypes = sequelize.DataTypes;

let sequelize = new Sequelize(...);

const Student = require('../models/students')(sequelize, DataTypes);
0 голосов
/ 06 марта 2019

Я подозреваю, что ваш Student_Info имеет значение null.Ваше приложение успешно подключается к базе данных?Это помогает регистрировать ... например,

sequelizeDB
  .authenticate()
  .then(() => {
        console.log('Yes! DB Connection);
        ...
    })
    .catch(err => {
        console.error('No! Unable to connect to DB', err);
    });

... и ИМХО код читается лучше, когда вы называете экземпляр БД чем-то, кроме "sequelize".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...