廖雪峰node学习笔记Java 核心技术

8-廖雪峰-node-web-koa2入门

2017-08-09  本文已影响144人  _panda

怎么安装koa

C:\...\hello-koa> npm install koa@2.0.0
//在hello-koa这个目录下创建一个package.
//json,这个文件描述了我们的hello-koa工程
//会用到哪些包。完整的文件内容如下:

{
    "name": "hello-koa2",
    "version": "1.0.0",
    "description": "Hello Koa 2 example with async",
    "main": "app.js",
    "scripts": {
        "start": "node app.js"
    },
    "keywords": [
        "koa",
        "async"
    ],
    "author": "Michael Liao",
    "license": "Apache-2.0",
    "repository": {
        "type": "git",
        "url": "https://github.com/michaelliao/learn-javascript.git"
    },
    "dependencies": {
        "koa": "2.0.0"
    }
}

然后再

C:\...\hello-koa> npm install

关于定义的问题

var express = require('express');
var app = express();

这里有了==express==,为什么第二行又要有一个==app==对象,而且==express()==,这个方法不是还没有定义了么

var express = require('express');
//通过引入包获得一个express的函数

var app = express();
//执行引入的express()获得一个express函数封装的一个闭包函数

//可能的实现是这个样子的

function express(){

    return function (){    //上文的的app
        //do something
    }
}
module.exports = express;
//也就是所谓的闭包……

关于middleware

// 导入koa,和koa 1.x不同,在koa2中,我们导入的是一个class,因此用大写的Koa表示:
const Koa = require('koa');

// 创建一个Koa对象表示web app本身:
const app = new Koa();

app.use(async(ctx, next) => {
    console.log(`medthod: ${ctx.request.method} url:${ctx.request.url}`); // 打印URL
    // console.log(`ctx: ${ctx.request}`)
    await next(); // 调用下一个middleware
});

app.use(async(ctx, next) => {
    const start = new Date().getTime(); // 当前时间
    await next(); // 调用下一个middleware
    const ms = new Date().getTime() - start; // 耗费时间
    console.log(`Time: ${ms}ms `); // 打印耗费时间

    // console.time("test");
    // await next();
    // console.timeEnd("test");
});

app.use(async(ctx, next) => {
    await next();
    ctx.response.type = 'text/html';
    ctx.response.body = '<h1>Hello, koa2!</h1>';
});

app.listen(3000);
console.log('app started at port 3000...');
上一篇下一篇

猜你喜欢

热点阅读