programing

TypeError: 정의되지 않은(mariaDB, ExpressJs) 속성 'findAll'을 읽을 수 없습니다.

sourcejob 2023. 11. 5. 11:34
반응형

TypeError: 정의되지 않은(mariaDB, ExpressJs) 속성 'findAll'을 읽을 수 없습니다.

TypeError: 정의되지 않은 속성 'findAll'을 읽을 수 없습니다.

findAll함수는 오류를 만들지만,Connection성공했습니다.
그리고 데이터베이스 또한 이름으로 생성됩니다.managers.


  • app.js
  • 모델들
    • index.js
    • 마리아야.
      • manager.model.js
    • www.js

models/index.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);

무엇보다도 당신의 몸을 담고 있는 것은manager변수 ? 당신의managervariable에 연결 sequelize가 포함되어 있습니다.당신의 목적은 테이블을 요청하는 것입니다.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);

다음 파일에서 마지막으로 내보낸 새 변수를 가져오십시오! 그리고 Enjoy!

  • app.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;

언급URL : https://stackoverflow.com/questions/63256698/typeerror-cannot-read-property-findall-of-undefined-mariadb-expressjs

반응형