创建一个koa项目目录:
$ mkdir myapp
进入刚才创建的项目:
$ cd myapp
执行npm init生成项目配置文件:
通过 npm init 命令为你的应用创建一个 package.json 文件。 欲了解 package.json 是如何起作用的,请参考 Specifics of npm’s package.json handling。
$ npm init
此命令将要求你输入几个参数,例如此应用的名称和版本。 你可以直接按“回车”键接受默认设置即可,下面这个除外:
entry point: (index.js)
接下来新建一个app.js然后安装koa:
键入 app.js 或者你所希望的名称,这是当前应用的入口文件。如果你希望采用默认的 index.js 文件名,只需按“回车”键即可。
接下来安装 koa 并将其保存到依赖列表中:
$ npm install koa --save
如果只是临时安装 koa,不想将它添加到依赖列表中,只需略去 --save 参数即可:
$ npm install koa
安装 Node 模块时,如果指定了 --save 参数,那么此模块将被添加到 package.json 文件中 dependencies 依赖列表中。 然后通过 npm install 命令即可自动安装依赖列表中所列出的所有模块。
在刚才新建的app.js中引入koa,使用koa:
//引入Koa
const koa=require(‘koa’);
const app=new koa();
//配置中间件
app.use( async (ctx)=>{
ctx.body=‘hello koa2’
})
//监听端口
app.listen(3000);
async await解决异步
async 是“异步”的简写,而 await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。
简单理解:
async是让方法变成异步。 await是等待异步方法执行完成。
async是让方法变成异步,在终端里用node执行这段代码,你会发现输出了Promise { ‘Hello async’ },这时候会发现它返回的是Promise。
async function getData(){
return ‘这是一个数据’;
}
console.log(getData())
console.log(getData())打印返回的值,发现返回的值是Promise
Promise { ‘Hello async’ }
await 在等待async方法执行完毕,其实await等待的只是一个表达式,这个表达式在官方文档里说的是Promise对象,但是它也可以接受普通值。 注意:await必须在async方法中才可以使用因为await访问本身就会造成程序停止堵塞,所以必须在异步方法中才可以使用。
错误写法:这是使用await是错误的写法。
async function getData(){
return '这是一个数据';
}
var d=await getData();
console.log(d); //await is only valid in async function
正确写法:await 是等待异步方法执行完成,可以获取异步方法里面的数据,但是必须得用在异步方法里面。
async function getData(){
return '这是一个数据';
}
async function test(){
var d=await getData();
console.log(d);
}
test();
await 阻塞的功能 ,把异步改成一个同步
async function getData(){
console.log(2);
return ‘这是一个数据’;
}
async function test(){
console.log(1);
var d=await getData();
console.log(d);
console.log(3);
}
test(); //输出1 2 3
async 会将其后的函数(函数表达式或 Lambda)的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,并将其 resolve 的结果返回出来
function findData() {
return new Promise(resolve => {
setTimeout(() => resolve(“long_time_value”), 1000);
});
}
async function test() {
const v = await findData();
console.log(v);
}
test();