express - findOne 不是函数

标签 express sequelize.js

我正在尝试使用 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;

}

路线
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;

最佳答案

当您使用 module.exports 时,您应该返回 Stundet。您已经导出了整个函数。而且我认为您应该传递 DataTypes 而不是 Sequelize。

像这样的东西:

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

}

所以在你的 route 为了使用你的模型:
const Sequelize = require('sequelize');
const DataTypes = sequelize.DataTypes;

let sequelize = new Sequelize(...);

const Student = require('../models/students')(sequelize, DataTypes);

关于express - findOne 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55007284/

相关文章:

javascript - 无法摆脱 ForbiddenError : invalid csrf token on express with csurf

javascript - 在 Node Express 路由中使用句点时收到 403

node.js - 异步等待然后在同一个函数上

node.js - 有没有办法在 Sequelize 中创建关联

node.js - TypeError : this. build(...).save 不是函数

node.js - 如何从 node.js 中的 url 下载 pdf 文件?

arrays - 如何在 Mongoose 中搜索填充数组 [包含 ref 的数组]

node.js - Sequelize 关联返回 Sequelize 实例而不是对象

express - 将获取响应 header 转发到 Apollo graphql 响应

node.js - 使用 Sequelize 和 Sqlite3 设置多对多关联