const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
使用 TypeScript
準備工作
-
yarn global add typescript ts-node
全局安裝工具 -
yarn add @types/express
安裝類型支持 tsc --init
- 修改 tsconfig的
target
和nolmplicitAny
- 將
require
改為import
運行
ts-node app2.ts
路由
使用 app.use 如何實現路由
const express = require('express')
const app = express()
app.use((request,response, next)=> {
if (request.path === '/' && request.method === 'get') {
response.send('根目錄')
}
next()
})
app.use('/xxx', (request, response, next) => {
response.send('這是 xxx')
next()
})
app.get('/aaa', (request, response, next) => {
response.send('這是 aaa')
next()
})
app.listen(3000, ()=> {
console.log('正在listen 3000');
})
更方便的寫法
app.use('/xxx',fn)
app.get('/xxx',fn)
app.post('/xxx',fn)
app.route('/xxx').all(f1).get(f2).post(f3)
這些都是 API 糖
錯誤處理
next()能傳參數嗎?
- 你可以看文檔,也可以看TypeScript定義
- 推薦后者
next(error)
- 會直接進入errorHandler,不執行后面的中間件
- errorHandler的默認實現見文檔
如何自定義errorHandler
- 還是看文檔,文檔說一般在最后定義
app.use((err, req, res, next) => {})
- 可以定義多個這樣的中間件
onst express = require('express')
const app = express()
app.use((request, response, next) => {
response.write('1')
next()
})
app.use((request, response, next) => {
response.write('2')
if (true) {
next('error msg')
} else {
next()
}
})
app.use((request, response, next) => {
response.write('3')
next()
})
app.use((error,request, response, next) => {
response.write(error)
response.end()
next()
})
app.listen(3000, ()=> {
console.log('正在listen 3000');
})