最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Next.js項(xiàng)目中使用SQLite的實(shí)現(xiàn)示例

 更新時(shí)間:2025年09月01日 10:36:41   作者:fengjutian  
本文主要介紹了Next.js項(xiàng)目中使用SQLite的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

無論你是做一個(gè)MVP,還是完整的 Web 應(yīng)用,存儲(chǔ)和讀取數(shù)據(jù)都至關(guān)重要。SQLite 是一款可移植、零配置的輕型數(shù)據(jù)庫,能讓你快速上手。

1. 為什么要在 Next.js 中使用 SQLite?

  • Next.js 是構(gòu)建服務(wù)端器 React 框架,自動(dòng)處理路由、SSR、代碼分割等。
  • SQLite 是一款文件型 SQL 數(shù)據(jù)庫引擎,輕量、快速且零配置。

Next.js + SQLite 的優(yōu)勢:

  • 簡單設(shè)置:SQLite 只是普通文件存儲(chǔ),無需運(yùn)行復(fù)雜的數(shù)據(jù)庫服務(wù)器。
  • 客戶端查詢:可直接在 Next.js 應(yīng)用中執(zhí)行查詢,無需額外后端。
  • 離線持久化:用戶短暫離線后數(shù)據(jù)依然存在。
  • 可移植性:數(shù)據(jù)庫文件可在不同環(huán)境與平臺(tái)間輕松遷移。
  • 可擴(kuò)展性:SQLite 足夠應(yīng)付大多數(shù)簡單查詢需求,后期可平滑遷移到 Postgres、MySQL 等。

在快速原型階段,SQLite 讓你無需搭建獨(dú)立數(shù)據(jù)庫服務(wù)器即可驗(yàn)證核心功能。

2. 安裝依賴

在 Next.js 中使用 SQLite,需安裝以下依賴:

npm install sqlite3
npm install @mapbox/node-sqlite3
npm install sqlite

3. 創(chuàng)建數(shù)據(jù)庫

pages/api 目錄下新建 db.js

// pages/api/db.js
import sqlite3 from 'sqlite3'
import { open } from 'sqlite'

// 打開 SQLite 數(shù)據(jù)庫連接
export async function openDb() {
  return open({
    filename: './mydb.db',
    driver: sqlite3.Database
  })
}

該文件會(huì)在項(xiàng)目根目錄創(chuàng)建名為 mydb.db 的 SQLite 文件。若文件不存在,首次連接時(shí)會(huì)自動(dòng)創(chuàng)建。

4. 定義表結(jié)構(gòu)

pages/api 目錄下創(chuàng)建 seed.js,用于初始化數(shù)據(jù)庫表:

// pages/api/seed.js
import { openDb } from './db'

async function setup() {
  const db = await openDb()

  // 創(chuàng)建 posts 表
  await db.exec(`
    CREATE TABLE posts (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      title TEXT,
      content TEXT
    );
  `)

  // 插入示例數(shù)據(jù)
  await db.run(
    'INSERT INTO posts (title, content) VALUES (?, ?)',
    'Hello World',
    'My first blog post!'
  )

  await db.close()
}

setup().catch(err => console.error(err.message))

運(yùn)行腳本:

node pages/api/seed.js

至此,數(shù)據(jù)庫與表已準(zhǔn)備就緒。

5. 獲取數(shù)據(jù)(服務(wù)端渲染)

pages/index.js 中利用 getServerSideProps 查詢數(shù)據(jù)并傳給組件:

// pages/index.js
import { openDb } from './api/db'

export async function getServerSideProps() {
  const db = await openDb()
  const posts = await db.all('SELECT * FROM posts')
  await db.close()

  return {
    props: { posts }
  }
}

function Home({ posts }) {
  // 在 UI 中渲染 posts
  return (
    <div>
      <h1>Posts</h1>
      <ul>
        {posts.map(p => (
          <li key={p.id}>
            <h2>{p.title}</h2>
            <p>{p.content}</p>
          </li>
        ))}
      </ul>
    </div>
  )
}

export default Home

6. 實(shí)現(xiàn) CRUD 操作

6.1 創(chuàng)建(Create)

pages/api/posts/create.js

import { openDb } from '../db'

export default async function handler(req, res) {
  const { title, content } = req.body
  const db = await openDb()
  const result = await db.run(
    'INSERT INTO posts (title, content) VALUES (?, ?)',
    [title, content]
  )
  await db.close()
  res.status(201).json(result)
}

6.2 讀?。≧ead)

pages/api/posts/[id].js

import { openDb } from '../../db'

export default async function handler(req, res) {
  const id = req.query.id
  const db = await openDb()
  const post = await db.get('SELECT * FROM posts WHERE id = ?', [id])
  await db.close()
  res.status(200).json(post)
}

6.3 更新(Update)

pages/api/posts/update.js

import { openDb } from '../db'

export default async function handler(req, res) {
  const { id, title, content } = req.body
  const db = await openDb()
  await db.run(
    `UPDATE posts SET title = ?, content = ? WHERE id = ?`,
    [title, content, id]
  )
  await db.close()
  res.status(200).json({ message: 'Post updated' })
}

6.4 刪除(Delete)

pages/api/posts/delete.js

import { openDb } from '../db'

export default async function handler(req, res) {
  const { id } = req.body
  const db = await openDb()
  await db.run('DELETE FROM posts WHERE id = ?', [id])
  await db.close()
  res.status(200).json({ message: 'Post deleted' })
}

7. 客戶端數(shù)據(jù)獲?。⊿WR/React Query)

暴露統(tǒng)一的 /api/posts 端點(diǎn):

// pages/api/posts.js
import { openDb } from './db'

export default async function handler(req, res) {
  const db = await openDb()
  const posts = await db.all('SELECT * FROM posts')
  await db.close()
  res.status(200).json(posts)
}

在客戶端組件中:

useEffect(() => {
  async function fetchPosts() {
    const res = await fetch('/api/posts')
    const posts = await res.json()
    // 更新組件狀態(tài)
  }
  fetchPosts()
}, [])

到此這篇關(guān)于Next.js項(xiàng)目中使用SQLite的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Next.js使用SQLite內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

桐乡市| 大关县| 淳安县| 吕梁市| 大埔区| 额济纳旗| 丹阳市| 澄江县| 二连浩特市| 辽宁省| 宾阳县| 广西| 苏尼特右旗| 高淳县| 扶绥县| 龙胜| 巴南区| 内江市| 靖西县| 夏河县| 卢龙县| 福建省| 临邑县| 诸城市| 葫芦岛市| 中牟县| 锡林浩特市| 南召县| 玉环县| 方山县| 开封县| 平塘县| 遂平县| 成安县| 烟台市| 盐山县| 景洪市| 郓城县| 婺源县| 望都县| 西平县|