TypeError: невозможно прочитать свойство findAll из undefined (mariaDB, ExpressJs) - PullRequest
1 голос
/ 05 августа 2020

TypeError: Невозможно прочитать свойство 'findAll' неопределенного

findAll функция выдает ошибку, но Connection прошла успешно.
И база данных также создается под этим именем managers.

  • приложение js
  • модели
    • индекс. js
    • maria
      • manager.model. js
  • bin
    • www.js

модели / индекс. js

const { Sequelize } = require('sequelize');

const manager = new Sequelize({
    dialect: 'mariadb',
    host: '127.0.0.1',
    port: '13306',
    username: 'xxx',
    password: 'xxx',
    database: 'test',
    timezone: 'Asia/Seoul'
});

require('./maria/manager.model')(manager);

module.exports=manager;

models / maria / manager.model. js

const { DataTypes } = require('sequelize');

module.exports = (sequelize) => {
     sequelize.define('manager', {
        id: {
            allowNull: false,
            autoIncrement: true,
            primaryKey: true,
            type: DataTypes.INTEGER
        },
        name: {
            allowNull: false,
            type: DataTypes.STRING,
        }
    }, {timestamps: true }).sync({force:false});
};

app. js

const express = require('express');
const app = express();

const db = require('./models');
console.log(`Checking database connection...`);

// It works!
db.authenticate().then(()=>{
  console.log('Database connection OK!');
});

// It makes error!
const find_test = db.manager.findAll();
console.log(find_test);

Ответы [ 2 ]

0 голосов
/ 05 августа 2020
  • приложение js
  • продолжение
    • модели
      • manager.model. js
    • index. js

app. js

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

console.log(`Checking database connection...`);
maria.authenticate()
    .then(()=>{
      console.log('Database connection OK!');
    });

const test = models.manager.findOne()

sequelize / index. js

const { Sequelize } = require('sequelize');

const maria = new Sequelize({
    dialect: 'mariadb',
    host: '127.0.0.1',
    port: '13306',
    username: 'xxxx',
    password: 'xxxx',
    database: 'test',
    timezone: 'Asia/Seoul'
});

require('./models/manager.model')(maria)

module.exports=maria;
0 голосов
/ 05 августа 2020

Прежде всего, что содержит вашу переменную manager? ваша переменная manager содержит продолжение соединения. Ваша цель - запросить вашу таблицу manager, но вы не можете сделать это с помощью переменной. Поскольку он не содержит спецификации таблицы, а содержит соединение с базой данных.

const { DataTypes } = require('sequelize');

module.exports = (sequelize) => {
     return sequelize.define('manager', {
        id: {
            allowNull: false,
            autoIncrement: true,
            primaryKey: true,
            type: DataTypes.INTEGER
        },
        name: {
            allowNull: false,
            type: DataTypes.STRING,
        }
    }, {timestamps: true });
};

В этом файле вам необходимо вернуть определение вашей таблицы.

const { Sequelize } = require('sequelize');

const manager = new Sequelize({
    dialect: 'mariadb',
    host: '127.0.0.1',
    port: '13306',
    username: 'xxx',
    password: 'xxx',
    database: 'test',
    timezone: 'Asia/Seoul'
});

const myTable = require('./maria/manager.model')(manager);

module.exports= {
  manager, myTable
};

и в этом файле вы необходимо сохранить возвращаемое значение в переменной и экспортировать его.

const express = require('express');
const app = express();

const { manager, myTable }= require('./models');
console.log(`Checking database connection...`);

// It works!
manager.authenticate().then(()=>{
  console.log('Database connection OK!');
});


const find_test = myTable.findAll();
console.log(find_test);

Наконец, в следующем файле импортируйте новые экспортированные переменные! и наслаждайтесь!

...