繁体   English   中英

Sequelize,Express JS - 无法读取未定义的属性(读取“findAll”)

[英]Sequelize, Express JS - Cannot read properties of undefined (reading 'findAll')

我正在使用连接到 MSSQL 数据库的 Express JS 和 Sequelize。 我无法执行任何请求,因为我收到错误“无法读取未定义的属性(读取‘findAll’)”。 谁能帮忙解决这个问题?

下面是我的设置:

邀请Model:

module.exports = (sequelize, DataTypes) => {
    const Invites = sequelize.define("Invites", {
        Id: {
            type: DataTypes.INTEGER,
            autoIncrement: true,
            primaryKey: true
        },
        Recipient: {
            type: DataTypes.STRING,
            allowNull: false,
            validate: {
                notEmpty: true
            }
        },
        Code: {
            type: DataTypes.INTEGER,
            allowNull: false,
            validate: {
                notEmpty: true
            }
        },
        Score: {
            type: DataTypes.INTEGER,
            allowNull: false,
            validate: {
                notEmpty: true
            }
        },
        Status: {
            type: DataTypes.INTEGER,
            allowNull: false,
            validate: {
                notEmpty: true
            }
        },
        Created: {
            type: DataTypes.DATE,
            allowNull: false,
            validate: {
                notEmpty: true
            }
        },
        ExpiresOn: {
            type: DataTypes.DATE,
            allowNull: false,
            validate: {
                notEmpty: true
            }
        }
    });

    return Invites;
};

邀请控制器:

const { invitesModel } = require('../models/Invites');

const getAllInvites = (req, res) => {
    invitesModel.findAll().then((invites) => {
        res.send(invites);
    }).catch((err) => {
        console.log(err);
    })
};


module.exports = {
    getAllInvites,
}

索引.js:

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const cors = require('cors');
require('dotenv').config();
const db = require('./models');
const invitesController = require('./controllers/inviteController');
const cookieParser = require('cookie-parser');
const PORT = process.env.PORT || 5000;

app.use(cors()); //Cross origin resource sharing
app.use(express.json()); 
app.use(bodyParser.urlencoded({extended: false}));
app.use(cookieParser());


//Get invite data
app.route('/api/invites').get(invitesController.getAllInvites);


db.sequelize.sync().then((req) => {
  app.listen(PORT, () => {
    console.log(`Server is running on port ${PORT}`);
  });  
});


/模型/index.js:

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
  .readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

require 语句'../models/Invites'不返回具有invitesModel属性的 object。

您可能希望将导入语句更改为:

const { Invites } = require('../models');

然后使用

Invites.findAll(...);

查询邀请model。

如果您不确定 require 语句获取的是什么,您可以添加一个日志语句来检查:

const modelsObj = require('../models');
console.log(Object.keys(modelObj); // or console.log(JSON.stringify(modelsObj);

尝试添加“?”

const getAllInvites = (req, res) => {
invitesModel?.findAll()?.then((invites) => {
    res.send(invites);
}).catch((err) => {
    console.log(err);
})

};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM