正兒八經的前端開發邁出全棧的第一步,記錄一次用 koa2 搭建一個後臺應用。html
前期已安裝好前端
# 建立項目文件夾
mkdir node-koa2-app
# 進入文件夾
cd node-koa2-app
# npm 初始化
npm init -y
複製代碼
安裝koa框架node
npm i koa -S
複製代碼
建立 app.js 文件,嘗試下 Hello World!npm
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World!';
});
app.listen(3000);
複製代碼
訪問 http://localhost:3000
就能看到 Hello World!
了,真是簡單。bash
再次優化一下,訪問是一個完成的 html
app
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx, next) => {
await next();
ctx.response.type = 'text/html';
ctx.response.body = '<h1>Hello World!</h1>';
});
app.listen(3000, () => {
console.log('listening server http://localhost:3000');
});
app.listen(3001, () => {
console.log('listening server http://localhost:3001');
});
複製代碼
Koa 應用程序是一個包含一組中間件函數的對象,它是按照相似堆棧的方式組織和執行的。框架
ctx就是上下文(Context),Context 將 node 的 request 和 response 對象封裝到單個對象中,還對 Koa 內部對一些經常使用的屬性或者方法作了代理操做,使得咱們能夠直接經過 ctx 獲取。好比,ctx.request.url 能夠寫成 ctx.url。除此以外,Koa 還約定了一箇中間件的存儲空間 ctx.state。經過 state 能夠存儲一些數據,好比用戶數據,版本信息等。koa
這是一種級聯的方式,當一箇中間件調用 next() 則該函數暫停並將控制傳遞給定義的下一個中間件。當在下游沒有更多的中間件執行後,堆棧將展開而且每一箇中間件恢復執行其上游行爲。async
// 按照官方示例
const Koa = require('koa')
const app = new Koa()
// 記錄執行的時間
app.use(async (ctx, next) => {
let stime = new Date().getTime()
console.log('開始時間'+stime);
await next()
let etime = new Date().getTime()
ctx.response.type = 'text/html'
ctx.response.body = '<h1>Hello World!</h1>'
console.log('結束時間'+etime);
console.log(`請求地址: ${ctx.path},響應時間:${etime - stime}ms`)
});
app.use(async (ctx, next) => {
console.log('中間件1 doSoming');
await next();
console.log('中間件1 end');
})
app.use(async (ctx, next) => {
console.log('中間件2 doSoming');
await next();
console.log('中間件2 end');
})
app.use(async (ctx, next) => {
console.log('中間件3 doSoming');
await next();
console.log('中間件3 end');
})
app.listen(3000, () => {
console.log('server is running at http://localhost:3000')
})
複製代碼
引入koa-router函數
npm i koa-router -S
複製代碼
安裝完成後執行
const Koa = require('koa')
// 注意 require('koa-router') 返回的是函數:
const router = require('koa-router')()
const app = new Koa()
// 添加路由
router.get('/', async (ctx, next) => {
ctx.response.body = `<h1>index page</h1>`
})
router.get('/home', async (ctx, next) => {
ctx.response.body = '<h1>HOME page</h1>'
})
router.get('/404', async (ctx, next) => {
ctx.response.body = '<h1>404 Not Found</h1>'
})
// 調用路由中間件
app.use(router.routes())
app.listen(3000, ()=>{
console.log('server is running at http://localhost:3000')
})
複製代碼
這樣就能實現一個網站應用了,對於前端開發者來講,node 有自然的優點,js語法至關友好,固然確定也會由於弱語言類型少不了坑,後面一步一步學習。