一、express 路由 todos案例
生活随笔
收集整理的這篇文章主要介紹了
一、express 路由 todos案例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、express路由
動態(tài)路由參數(shù) params
路徑參數(shù) query
二、 todos案例
2.1 準備工作
2.2 編寫接口相關(guān)的代碼
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')// 設(shè)置響應(yīng)狀態(tài)碼// res.statusCode = 201// 結(jié)束響應(yīng)// res.end()// res.send({// foo: 'bar'// })// res.cookie('foo', 'bar')// res.status(201).send('ok') })// 查詢?nèi)蝿?wù)列表 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})}} }) // 根據(jù)id查詢單個任務(wù) 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)// }) }) // 添加任務(wù) app.post('/todos', async (req, res) => {try {// 1. 獲取客戶端請求體參數(shù)console.log(req.body)const todo = req.body// 2. 數(shù)據(jù)驗證if(!todo.title) {return res.json({error: 'The field title is required.'})}// 3. 數(shù)據(jù)驗證通過,把數(shù)據(jù)存儲到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. 發(fā)送成功的響應(yīng)res.status(201).json(todo)} catch (err) {res.status(500).json({error: err.message})} }) // 修改任務(wù) app.patch('/todos/:id', async (req, res) => {try {// 1. 獲取表單數(shù)據(jù)const todo = req.body// 2. 查找到要修改的數(shù)據(jù)項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})} }) // 刪除任務(wù) 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內(nèi)置的util模塊的promisify()可以把普通的函數(shù)包裝成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": "修改數(shù)據(jù)"},{"id": 2,"title": "修改數(shù)據(jù)2"},{"id": 3,"title": "打豆豆"},{"title": "笨小孩","id": 4},{"title": "笨小孩5","id": 5}],"users": [] } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的一、express 路由 todos案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十二、PHP框架Laravel学习笔记—
- 下一篇: 一、uniapp项目(封装异步请求、mo