来把项目跑起来

上一节我们规划好了目录,配置好了开发环境。现在就来将项目跑起来,本节主要是讲视图、控制器之类的串起来。

router

我们先来配置下路由,前面说了,路由放在routes 目录下.

  1. // routes/index.js
  2. const router = require('koa-router')()
  3. module.exports = (app) => {
  4. router.get('/', require('./home').index)
  5. router.get('/about', require('./about').index)
  6. app
  7. .use(router.routes())
  8. .use(router.allowedMethods())
  9. }
  10. // routes/home.js
  11. module.exports = {
  12. async index (ctx, next) {
  13. await ctx.render('index', {
  14. title: 'abc-blog',
  15. desc: '欢迎关注公众号 JavaScript之禅'
  16. })
  17. }
  18. }

看看index.js

  1. // index.js
  2. const Koa = require('koa')
  3. const router = require('./routes')
  4. const app = new Koa()
  5. router(app)
  6. app.listen(3000, () => {
  7. console.log('server is running at http://localhost:3000')
  8. })

配置模板引擎

模板引擎(Template Engine)是一个将页面模板和数据结合起来生成 html 的工具。在这个项目中我们使用了 nunjucks 这个模板引擎,nunjucks移植与Python的jinja2,使用起来基本一样

  1. $ npm i koa-views nunjucks --save

使用koa-views 来配置 nunjucks

  1. const Koa = require('koa')
  2. const path = require('path')
  3. const views = require('koa-views')
  4. const router = require('./routes')
  5. const app = new Koa()
  6. app.use(views(path.join(__dirname, 'views'), {
  7. map: { html: 'nunjucks' }
  8. }))
  9. ···

将所有模板放在 views 目录下,在views 目录下新建一个index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>{{title}}</title>
  8. </head>
  9. <body>
  10. <h1>{{title}}</h1>
  11. <p>{{ desc }}</p>
  12. </body>
  13. </html>

然后可以通过 ctx.render 函数 渲染模板,第一个参数是模板的名字,它会自动去views 找到对应的模板并渲染,第二个参数是传输的给模板的数据。如下,我们渲染了index.html并传给了它title与desc

  1. // routes/home.js
  2. module.exports = {
  3. async index (ctx, next) {
  4. await ctx.render('index', {
  5. title: 'abc-blog',
  6. desc: '欢迎关注公众号 JavaScript之禅'
  7. })
  8. }
  9. }

打开浏览器将得到如下内容

3.2 把项目跑起来 - 图1关于nunjucks的具体语法可查看官方文档

https://mozilla.github.io/nunjucks/cn/templating.html

配置静态资源

我们将使用 koa-static 插件来处理静态资源,并且把所有静态资源放在public目录下

  1. ···
  2. const serve = require('koa-static')
  3. ···
  4. app.use(serve(
  5. path.join(__dirname, 'public')
  6. ))
  7. ···

现在处理数据库相关的处理没加入,我们的这个项目基本上已经成型。在开发阶段,我们使用

  1. $ nodemon index.js

来启动项目,免去手动重启的问题