next.js SQLite文件名不能为空/未定义

jum4pzuy  于 2023-04-05  发布在  SQLite
关注(0)|答案(4)|浏览(170)

我正在学习this教程,我们正在使用next.js创建一个应用程序。我们正在使用sqlite,并测试数据库。在教程中,我们编写了以下'database-test.js'文件:

const sqlite = require('sqlite');

async function setup() {
    const db = await sqlite.open('./mydb.sqlite');
    await db.migrate({force: 'last'});

    const people = await db.all('SELECT * FROM person');
    console.log('ALL PEOPLE', JSON.stringify(people, null, 2));

    const vehicles = await db.all('SELECT * FROM vehicle');
    console.log('ALL VEHICLES', JSON.stringify(vehicles, null, 2));
}

setup();

当我使用$node database-test.js时,我得到以下错误:

(node:26446) UnhandledPromiseRejectionWarning: Error: sqlite: filename cannot be null / undefined

我真的不明白为什么我们要打开一个.sqlite文件,而不是一个.db文件。我已经确保我有正确的路径到.sqlite文件。这个错误的原因是什么,我如何修复它?我似乎找不到任何其他文档或例子的.open函数。

r8uurelv

r8uurelv1#

正如@ANimator120所提到的,但有一些调整。使用require,因为它在服务器端运行。通过npm i sqlite3安装sqlite3。然后添加路径到您的迁移文件夹,如果它不在项目根目录中。

const sqlite3 = require('sqlite3');
const sqlite = require('sqlite');

async function openDb() {
  return sqlite.open({
    filename: './database.db',
    driver: sqlite3.Database,
  });
}

async function setup() {
  const db = await openDb();
  await db.migrate(
                    { 
                      migrationsPath: './src/migrations', //add cutom path to your migrations
                      force: 'last' 
                    }
                  );

  const people = await db.all('SELECT * FROM Person');
  console.log('all person', JSON.stringify(people, null, 2));

  const vehicle = await db.all(`SELECT a.*, b.* FROM Person as a
  LEFT JOIN Vehicle as b
  ON a.id = b.ownerId
  `);
  console.log('all vehicles', JSON.stringify(vehicle, null, 2));
}

setup();

一切都很好,至少对我来说。

mzsu5hc0

mzsu5hc02#

你需要npm安装sqlite和sqlite3使用open()方法的正确方法是。

const sqlite = require('sqlite');
      const sqlite3 = require('sqlite3')
    const {open} = require('sqlite')

       async function openDB (){
    return open({
        filename : './mydb.sqlite',
        driver: sqlite3.Database
    })
}

async function setup(){
    const db = await openDB();
    await db.migrate({force : 'last'});
}

setup();
jk9hmnmh

jk9hmnmh3#

结果他们在教程中使用的是sqlite3.0.3。对于sqlite3,在这种情况下使用open()的正确方法是:

import { open } from 'sqlite'
import sqlite3 from 'sqlite3'
 
// you would have to import / invoke this in another file
export async function openDB () {
  return open({
    filename: './mydb.sqlite',
    driver: sqlite3.Database
  })
}
shstlldc

shstlldc4#

1.首先使用npm i --save sqlite3终端命令安装sqlite3
1.在JS文件中写下这段代码而不是你的代码

const sqlite = require('sqlite');
const sqlite3 = require('sqlite3');
const {open} = require('sqlite');

async function openDB (){
   return open({
      filename : './mydb.sqlite',
      driver: sqlite3.Database
   })
}

async function setup(){
    const db = await openDB();
    await db.migrate({force : 'last'});
}

setup();

但当执行此命令行const people = await db.all('SELECT * FROM Person'); console.log("ALL PEOPLE", JSON.stringify(people, null, 2));它显示我的错误,表的人不存在,这就是为什么我从迁移文件中删除DROP TABLE Person;

相关问题