Bre*_*dan 5 node.js npm express sequelize.js
我得到的错误是这样的:
C:\Users\brend\project\server\node_modules\sequelize\lib\sequelize.js:392
this.importCache[path] = defineCall(this, DataTypes);
^
TypeError: defineCall is not a function
at Sequelize.import (C:\Users\brend\project\server\node_modules\sequelize\lib\sequelize.js:392:32)
at fs.readdirSync.filter.forEach (C:\Users\brend\project\server\src\models\index.js:20:35)
Run Code Online (Sandbox Code Playgroud)
我正在学习 node、vue 和一堆库,但我一直无法弄清楚这一点。
index.js 如下:
const fs = require('fs')
const path = require('path')
const Sequelize = require('sequelize')
const config = require('../config/config')
const db = {}
const sequelize = new Sequelize(
config.db.database,
config.db.user,
config.db.password,
config.db.options
)
fs
.readdirSync(__dirname)
.filter((file) =>
file !== 'index.js'
)
.forEach((file) => {
const model = sequelize.import(path.join(__dirname), file)
db[model.name] = model
})
db.sequelize = sequelize
db.Sequelize = Sequelize
module.exports = db
Run Code Online (Sandbox Code Playgroud)
这是我的 User.js,这是我目前拥有的唯一模型:
module.exports = (sequelize, DataTypes) =>
sequelize.define('User', {
email: {
type: DataTypes.STRING,
unique: true
},
password: DataTypes.STRING
})
Run Code Online (Sandbox Code Playgroud)
如有必要,我的文件夹结构:
-src
--app.js
--routes.js
--config
----config.js
--controllers
----AuthenticationController.js
--models
----index.js
----User.js
Run Code Online (Sandbox Code Playgroud)
还有一点是在我的 app.jssequelize.sync()中没有定义,至少我的 IDE 是这样表示的。
art*_*est 13
我在 github sequelize github上找到了这个,替换
const model = sequelize.import(path.join(__dirname, file));
Run Code Online (Sandbox Code Playgroud)
和
var model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
Run Code Online (Sandbox Code Playgroud)
它适用于 sequelize 6.3.0
Abh*_*hah 12
sequelize.import 在 sequelize v6+ 中已被弃用。它一直存在到 v5
https://sequelize.org/master/manual/upgrade-to-v6.html#sequelize https://sequelize.org/master/manual/models-definition.html
models/index.js工作直到续集v5:const fs = require('fs')
const path = require('path')
const Sequelize = require('sequelize')
const config = require('../config/config')
const db = {}
const sequelize = new Sequelize(
config.db.database,
config.db.user,
config.db.password,
config.db.options
)
fs
.readdirSync(__dirname)
.filter((file) =>
file !== 'index.js'
)
.forEach((file) => {
const model = sequelize.import(path.join(__dirname), file) // error occurs here
db[model.name] = model
})
db.sequelize = sequelize
db.Sequelize = Sequelize
module.exports = db
Run Code Online (Sandbox Code Playgroud)
sequelize.import将不可用。models/index.jsconst fs = require('fs')
const path = require('path')
const Sequelize = require('sequelize')
const config = require('../config/config')
const db = {}
const sequelize = new Sequelize(
config.db.database,
config.db.user,
config.db.password,
config.db.options
)
fs
.readdirSync(__dirname)
.filter((file) =>
file !== 'index.js'
)
.forEach((file) => {
//-----------------------THIS PART HERE-----------------------
/**
* Choose any one of the below definition for model variable
*/
// for individual model files having `export default (sequelize, DataTypes) => {`
const model = require(path.join(__dirname, file)).default(sequelize, Sequelize.DataTypes);
// for individual model files having `module.exports = (sequelize, DataTypes) => {`
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
//----------------------------------------------------------
})
db.sequelize = sequelize
db.Sequelize = Sequelize
module.exports = db
Run Code Online (Sandbox Code Playgroud)
注意事项:
如果export default ...在模型文件和 babel 中使用 -> 我们正在使用require(...).default
asrequire(...)不返回函数而是返回一个对象作为 :{ default: [Function] }并因此使用它的属性“默认”
尝试:
模型/index.js:
...
fs
.readdirSync(__dirname)
.filter((file) => {
return (file.indexOf(".") !== 0) && (file !== "index.js");
})
.forEach((file) => {
const model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
...
Run Code Online (Sandbox Code Playgroud)
models/user.js:(我用小写)
module.exports = (sequelize, Sequelize) => {
var User = sequelize.define('user', {
email: {
type: Sequelize.STRING,
unique: true
},
password: Sequelize.STRING
})
return User;
}
Run Code Online (Sandbox Code Playgroud)
调用model.user:
const model = require('./models'); // Change path if is necesary
model.user.create({ ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5721 次 |
| 最近记录: |