基於koa2搭建一個node應用實踐

基於koa2搭建一個node應用實踐

正兒八經的前端開發邁出全棧的第一步,記錄一次用 koa2 搭建一個後臺應用。html

環境搭建

前期已安裝好前端

  • node v10.16.0
  • npm 6.9.0

項目準備

# 建立項目文件夾
mkdir node-koa2-app

# 進入文件夾
cd node-koa2-app

# npm 初始化
npm init -y

複製代碼

初體驗koa服務

安裝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

再次優化一下,訪問是一個完成的 htmlapp

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

ctx就是上下文(Context),Context 將 node 的 request 和 response 對象封裝到單個對象中,還對 Koa 內部對一些經常使用的屬性或者方法作了代理操做,使得咱們能夠直接經過 ctx 獲取。好比,ctx.request.url 能夠寫成 ctx.url。除此以外,Koa 還約定了一箇中間件的存儲空間 ctx.state。經過 state 能夠存儲一些數據,好比用戶數據,版本信息等。koa

next

這是一種級聯的方式,當一箇中間件調用 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

引入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語法至關友好,固然確定也會由於弱語言類型少不了坑,後面一步一步學習。

相關文章
相關標籤/搜索