對server端有一點興趣,因而開始研究Node.js。
這裡記錄Koa這個網頁framework的一些基本使用,像是路由服務、繪製頁面。
建立環境:
1. 基本安裝(Node和nvm)2. 建立project資料夾,並執行 npm init 指令創建 package.json,會需要做些設定,練習時就一直按enter使用預設就可
3. 利用 npm i [PackageName]下載需要的模組,例如: npm i koa
使用npm安裝模組會自動更新package.json:
dependencies會自動更新 |
基本網頁的資料夾架構:
Web/ ------- app.js (主程式) (app.use, app.listen)
|
|---- router.js (url對應) (router.get, router.post)
|
|---- package.json
|
|---- views/
|
|---- controller/
|
|---- service/
|
|---- public/
|
|---- node_module/
先來測試Koa能否正常運作:
app.js:
const Koa = require('koa')
const app = new Koa()
app.listen(3000, ()=>{
console.log('server is running');
})
執行 node app.js 指令
結果:
路由服務:
client端輸入URL,路由服務會分析URL,然後引導client到想要的服務安裝koa-router: npm i koa-router
router.js:
const router = require('koa-router')()
module.exports = (app)=>{
router.get('/home', async(ctx, next)={
ctx.response.body = `<h1>home page</h1>`
})
router.get('/index', async(ctx, next)={
ctx.response.body = `<h1>index page</h1>`
})
app.use(router.routes())
.use(router.allowedMethods())
}
app.js:
const Koa = require('koa');
const router = require('./router');
const app = new Koa();
router(app);
app.listen(3000, ()=>{
console.log('server is running');
})
結果:
繪製頁面(render):
動態生成回傳給client的網頁安裝 koa-nunjucks-2 模板引擎: npm i koa-nunjucks-2
安裝 koa-static: npm i koa-static
app.js:
const path = require('path')
const Koa = require('koa');
const nunjucks = require('koa-nunjucks-2')
const staticFiles = require('koa-static')
const router = require('./router');
const app = new Koa();
app.use(staticFiles(path.resolve(__dirname, "./public"))) //指定靜態檔案目錄
app.use(nunjucks({
ext: 'html',
path: path.join(__dirname, 'views'), //指定視圖目錄
nunjucksConfig: {
trimBlocks: true
}
}))
router(app); //一定要寫在app.use(nunjucks(..)後,不然會error(ctx.render is not a function)
app.listen(3000, ()=>{
console.log('server is running');
})
router.js:
const router = require('koa-router')()
const PraController = require('./controller/pra')
module.exports = (app)=>{
router.get('/table', PraController.table)
app.use(router.routes())
.use(router.allowedMethods())
}
controller/pra.js:
module.exports = {
var users = [{ name: "Tom", age: 12 }, { name: "Ken", age: 22}]
table: async(ctx, next)=>{
await ctx.render('table', {
title: '歡迎您',
users: users,
})
},
}
views/table.html:
<!DOCTYPE html>
<html>
<head>
<title>{{title}}</title>
<link rel="stylesheet" href="/css/table.css">
</head>
<body>
<table>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
{% for user in users%}
<tr>
<td>{{user.name}}</td>
<td>{{user.age}}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
public/css/table.css:
table {
border:1px solid #000;
font-size:16px;
width:200px;
border:1px solid #000;
text-align:center;
border-collapse:collapse;
}
th {
background-color: #009FCC;
padding:10px;
border:1px solid #000;
color:#fff;
}
td {
border:1px solid #000;
padding:5px;
}
結果:
學了路由服務和繪製頁面兩招,基本上能架構簡單的網站了。
沒有留言:
張貼留言