【发布时间】:2022-02-18 03:05:03
【问题描述】:
晚上好。 我正在使用 SQLite 构建一个 Express REST API,而 Sequelize 是我选择的 ORM。 我正在使用现有的数据库,所以我使用了一个名为 sequelize-auto 的包 生成我的模型。
问题是,Sequelize 出于某种原因将看不到我的数据库、.db 文件,或者不会检测到表,尽管已明确定义。问题出现在这段代码中:
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`=$1 WHERE `UserId` = $2'
这个服务正在通过 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 的新手。我可能错过了一些重要的事情,但我似乎无法意识到是什么。非常感谢您的帮助。
【问题讨论】:
标签: node.js sqlite sequelize.js sequelize-auto