日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一、express 路由 todos案例

發布時間:2024/7/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一、express 路由 todos案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、express路由

  • 動態路由參數 params

  • 路徑參數 query

  • 二、 todos案例

    2.1 準備工作

  • 新建一個文件夾01-demo
  • 執行npm init -y 生成package.json配置文件
  • 執行npm install express --save 安裝express
  • 新建app.js文件,這是程序的入口文件
  • 新建db.json文件,用來保存數據
  • 新建db.js 模擬 用來操作數據庫
  • 2.2 編寫接口相關的代碼

    app.js文件:

    const express = require('express') const fs = require('fs') const app = express()// 配置解析表單請求體: application/json app.use(express.json()) // 配置解析表單請求體: application/x-www-form-urlencoded app.use(express.urlencoded())const { getDb, saveDb } = require('./db.js')app.get('/', (req, res) => {// console.log(req.url)// console.log(req.method)// console.log(req.headers)// console.log(req.query)// res.send('hello express')// 設置響應狀態碼// res.statusCode = 201// 結束響應// res.end()// res.send({// foo: 'bar'// })// res.cookie('foo', 'bar')// res.status(201).send('ok') })// 查詢任務列表 app.get('/todos', async (req, res) => {// fs.readFile('./db.json', 'utf8', (err, data) => {// if(err) {// res.status(500).json({// error: err.message// })// return;// }// const db = JSON.parse(data)// res.status(200).json(db.todos)// })try {const db = await getDb()res.status(200).json(db.todos)} catch (err) {if (err) {res.status(500).json({error: err.message})}} }) // 根據id查詢單個任務 app.get('/todos/:id', async (req, res) => {try {const db = await getDb()const todo = db.todos.find(todo => {return todo.id === Number.parseInt(req.params.id)})if (!todo) {return res.status(404).end()}res.status(200).json(todo)} catch (err) {res.status(500).json({error: err.message})}// fs.readFile('./db.json', 'utf8', (err, data) => {// if (err) {// return res.status(500).json({// error: err.message// })// }// const db = JSON.parse(data)// const todo = db.todos.find(todo => {// return todo.id === Number.parseInt(req.params.id)// })// if (!todo) {// return res.status(404).end()// }// res.status(200).json(todo)// }) }) // 添加任務 app.post('/todos', async (req, res) => {try {// 1. 獲取客戶端請求體參數console.log(req.body)const todo = req.body// 2. 數據驗證if(!todo.title) {return res.json({error: 'The field title is required.'})}// 3. 數據驗證通過,把數據存儲到db中const db = await getDb()const lastTodo = db.todos[db.todos.length - 1]todo.id = lastTodo ? lastTodo.id + 1 : 1db.todos.push(todo)await saveDb(db)// 4. 發送成功的響應res.status(201).json(todo)} catch (err) {res.status(500).json({error: err.message})} }) // 修改任務 app.patch('/todos/:id', async (req, res) => {try {// 1. 獲取表單數據const todo = req.body// 2. 查找到要修改的數據項const db = await getDb()const ret = db.todos.find(todo => {return todo.id === Number.parseInt(req.params.id)})if(!ret) {res.status(404).end()}Object.assign(ret, todo)await saveDb(db)res.status(200).json(ret)} catch (err) {res.status(500).json({error: err.message})} }) // 刪除任務 app.delete('/todos/:id', async (req, res) => {try {const todoId = Number.parseInt(req.params.id)const db = await getDb()const index = db.todos.findIndex((todo) => {return todo.id === todoId})if(index === -1) {return res.status(404).end()}db.todos.splice(index, 1)await saveDb(db)res.status(204).end()} catch (err) {res.status(500).json({error: err.message})} })app.listen(3000, () => {console.log('Server running at http://localhost:3000/') })

    db.js文件:

    const fs = require('fs') const { promisify } = require('util') // node內置的util模塊的promisify()可以把普通的函數包裝成promise const readFile = promisify(fs.readFile) const writeFile = promisify(fs.writeFile)const path = require('path') const dbPath = path.join(__dirname, './db.json')exports.getDb = async () => {const data = await readFile(dbPath, 'utf8')return JSON.parse(data) }exports.saveDb = async (db) => {const data = JSON.stringify(db, null, ' ')await writeFile(dbPath, data)}

    db.json文件:

    {"todos": [{"id": 1,"title": "修改數據"},{"id": 2,"title": "修改數據2"},{"id": 3,"title": "打豆豆"},{"title": "笨小孩","id": 4},{"title": "笨小孩5","id": 5}],"users": [] } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的一、express 路由 todos案例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。