Sequelize 'no such table:' 尽管 table 并且数据库明显存在且配置正确
Sequelize 'no such table:' despite table and database clearly existing and correctly configured
晚上好。
我正在使用 SQLite 构建一个 Express REST API,Sequelize 是我选择的 ORM。
我正在使用现有的数据库,所以我使用了一个名为 sequelize-auto 的包
生成我的模型。
问题是,Sequelize 出于某种原因看不到我的数据库、.db 文件,或者不会检测到 table,尽管已明确定义。问题出现在这段代码中:
const Sequelize = require('sequelize');
const sequelize = new Sequelize('expenserdb', 'user', 'pass', {
dialect: 'sqlite',
host: '../database/expenserdb.db'
});
const initModels = require('../models/init-models');
const models = initModels(sequelize);
module.exports = class dbService {
editUserName(newName) {
models.User.update({Name: newName}, {
where: {
UserId: 1
}
})
.catch((err) => {console.log(err)});
}
}
这是我的 dbService.js 文件,如您所见,数据库定义明确,名称、位置和所有内容都是正确的。尽管如此,我仍然得到:
Error: SQLITE_ERROR: no such table: User {errno: 1, code: 'SQLITE_ERROR', sql: 'UPDATE `User` SET `Name`= WHERE `UserId` = '
此服务正在通过 awilix 注入我的控制器,并在控制器内部调用该方法:
const container = require("../containerConfig");
const dbService = container.resolve("dbService");
exports.runNameChange = async (req) => {
const newName = JSON.stringify(req.body.name);
const result = await dbService.editUserName(newName);
return result;
};
反过来,当这个端点被命中时,控制器方法是运行:
app.post('/updateuser', async function(req, res) {
const result = await userController.runNameChange(req);
res.status(200).send(String(result));
});
此外,dboptions.json 文件:
{
"storage":"./database/expenserdb.db"
}
总的来说,我是 Node、Express 和 Sequelize 的新手。我可能错过了一些重要的东西,但我似乎无法意识到是什么。非常感谢帮助。
更新:刚弄明白,你需要完整路径而不是相对路径
冗长的构造函数,例如:
const sequelize = new Sequelize('expenserdb', 'user', 'pass', {
dialect: 'sqlite',
storage: 'E:/desktopshortcuts/yahalom/expenser/expenser-server/database/expenserdb.db'
});
晚上好。 我正在使用 SQLite 构建一个 Express REST API,Sequelize 是我选择的 ORM。 我正在使用现有的数据库,所以我使用了一个名为 sequelize-auto 的包 生成我的模型。
问题是,Sequelize 出于某种原因看不到我的数据库、.db 文件,或者不会检测到 table,尽管已明确定义。问题出现在这段代码中:
const Sequelize = require('sequelize');
const sequelize = new Sequelize('expenserdb', 'user', 'pass', {
dialect: 'sqlite',
host: '../database/expenserdb.db'
});
const initModels = require('../models/init-models');
const models = initModels(sequelize);
module.exports = class dbService {
editUserName(newName) {
models.User.update({Name: newName}, {
where: {
UserId: 1
}
})
.catch((err) => {console.log(err)});
}
}
这是我的 dbService.js 文件,如您所见,数据库定义明确,名称、位置和所有内容都是正确的。尽管如此,我仍然得到:
Error: SQLITE_ERROR: no such table: User {errno: 1, code: 'SQLITE_ERROR', sql: 'UPDATE `User` SET `Name`= WHERE `UserId` = '
此服务正在通过 awilix 注入我的控制器,并在控制器内部调用该方法:
const container = require("../containerConfig");
const dbService = container.resolve("dbService");
exports.runNameChange = async (req) => {
const newName = JSON.stringify(req.body.name);
const result = await dbService.editUserName(newName);
return result;
};
反过来,当这个端点被命中时,控制器方法是运行:
app.post('/updateuser', async function(req, res) {
const result = await userController.runNameChange(req);
res.status(200).send(String(result));
});
此外,dboptions.json 文件:
{
"storage":"./database/expenserdb.db"
}
总的来说,我是 Node、Express 和 Sequelize 的新手。我可能错过了一些重要的东西,但我似乎无法意识到是什么。非常感谢帮助。
更新:刚弄明白,你需要完整路径而不是相对路径 冗长的构造函数,例如:
const sequelize = new Sequelize('expenserdb', 'user', 'pass', {
dialect: 'sqlite',
storage: 'E:/desktopshortcuts/yahalom/expenser/expenser-server/database/expenserdb.db'
});