TypeError:无法读取未定义的属性“findAll”(mariaDB,ExpressJs)
Posted
技术标签:
【中文标题】TypeError:无法读取未定义的属性“findAll”(mariaDB,ExpressJs)【英文标题】:TypeError: Cannot read property 'findAll' of undefined (mariaDB, ExpressJs) 【发布时间】:2020-11-25 03:06:08 【问题描述】: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);
【问题讨论】:
如错误所示,db.manager
未定义
您的models/index.js
导出manager
,而不是具有manager
属性的对象。你在哪里有const db = require('./models')
,db
已经是manager
@Phill const find_test = db.findAll();
它会犯同样的错误
【参考方案1】:
首先,您的 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);
最后在下一个文件中,导入新导出的变量!享受吧!
【讨论】:
【参考方案2】: app.js 续集 型号 manager.model.js index.jsapp.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()
续集/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;
【讨论】:
以上是关于TypeError:无法读取未定义的属性“findAll”(mariaDB,ExpressJs)的主要内容,如果未能解决你的问题,请参考以下文章
(Discord.js)TypeError:无法读取未定义的属性“添加”
如何使用自定义错误消息捕获“TypeError:无法读取未定义的属性(读取'0')”?