我是nodejs和续集的新手,一直有一个我无法解决的问题。我想使用我创建的连接并将其导出到一个模块。
如下所示:
const dotEnv = require('dotenv');
const Sequelize = require('sequelize');
dotEnv.config();
module.exports.connection = async () => {
try{
const sequelize = new Sequelize(process.env.DB_DATABASE, process.env.DB_USER, process.env.DB_PASSWORD, {
host: process.env.DB_HOST,
port: process.env.DB_PORT,
dialect: 'mysql',
logging: false,
define: {
charset: 'utf8',
collate: 'utf8_general_ci',
},
});
await sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(error => {
throw error;
});
}catch(error){
throw error;
}
}然后,我有另一个文件,我想在其中使用它,如下所示
const Sequelize = require('sequelize');
const { connection }= require('../database');
const accountModel = connection.define('accounts', {
// attributes
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4,
primaryKey: true
},
name: {
type: Sequelize.STRING,
allowNull: false
},
email: {
type: Sequelize.STRING,
unique: true
},
password: {
type: Sequelize.STRING,
allowNull: false,
//is: /^[0-9a-f]{64}$/i
},
permission: {
type: Sequelize.STRING,
allowNull: false
},
discount: {
type: Sequelize.INTEGER,
allowNull: false
}
}, {
freezeTableName: true
});
module.exports = connection.model('accounts', accountModel);问题是我被告知: TypeError: connection.define不是一个函数,
连接工作正常,数据库正在运行,其他一切都正常,最后,如果我这样做,它也能工作:
const dotEnv = require('dotenv');
const Sequelize = require('sequelize');
dotEnv.config();
const sequelize = new Sequelize(process.env.DB_DATABASE, process.env.DB_USER, process.env.DB_PASSWORD, {
host: process.env.DB_HOST,
port: process.env.DB_PORT,
dialect: 'mysql',
logging: false,
define: {
charset: 'utf8',
collate: 'utf8_general_ci',
},
});
const accountModel = sequelize.define('accounts', {
// attributes
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUIDV4,
primaryKey: true
},
name: {
type: Sequelize.STRING,
allowNull: false
},
email: {
type: Sequelize.STRING,
unique: true
},
password: {
type: Sequelize.STRING,
allowNull: false,
//is: /^[0-9a-f]{64}$/i
},
permission: {
type: Sequelize.STRING,
allowNull: false
},
discount: {
type: Sequelize.INTEGER,
allowNull: false
}
}, {
freezeTableName: true
});
module.exports = sequelize.model('accounts', accountModel);我真的不知道为什么模块一不能工作,但是直接的方法可以。我已经尝试搜索谷歌和堆栈溢出的解决方案。
发布于 2020-05-15 14:38:04
第一种方法的问题是首先导出一个async function,而不是Sequelize instance (就像在第二个例子中那样),其次,函数本身没有返回任何内容。这就是为什么在另一个文件中需要connection.define()函数的原因。
在database.js中尝试这一点,它应该可以工作:
module.exports.connection = new Sequelize(process.env.DB_DATABASE, process.env.DB_USER, process.env.DB_PASSWORD, {
host: process.env.DB_HOST,
port: process.env.DB_PORT,
dialect: 'mysql',
logging: false,
define: {
charset: 'utf8',
collate: 'utf8_general_ci',
},
});您可以在其他地方完成所有的authenticate()和try {} catch (error) {}操作,例如,在您的第一个js文件中,通过要求相同的database.js文件启动服务器。但是对于模型定义,重要的是要将new Sequelize()实例导出到它们,以便能够使用define()
发布于 2020-05-15 13:49:26
我会做这样的事。在connections文件中,导出函数,然后在accountModel文件中导入和调用函数。
connection.js:
exports.connection= async function() { // Stuff here }accountModel.js:
const { connection }= require('../database');
let connection = await connection.connection();https://stackoverflow.com/questions/61819904
复制相似问题