Node.js教程 使用async/await——Node.js+ExpressJs+Babel
沉沙 2018-10-31 来源 : 阅读 1592 评论 0

摘要:本篇教程介绍了Node.js教程 使用async/await——Node.js+ExpressJs+Babel,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

本篇教程介绍了Node.js教程 使用async/await——Node.js+ExpressJs+Babel,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

<

在使用诸如restify/expressjs等Nodejs Web Framework时,我们最头疼的问题就是回调黑洞。
虽然后又Koa/Koa2号称“The Next Framework”使用co解决问题,但是核心this的设计和各种小流middleware对req/res的随意滥用,导致我对这个框架失去好感。
Expressjs依然是我在使用Nodejs编写API和Web时的首选框架。
在使用Expressjs时,如果我们也想使用await/async这些在ES7 stage-3中的特性,就需要借助别的工具。目前我推荐的是typescript(时下版本2.0.10)和babel,本章只介绍使用babel的方法,如有同学与我一样同样对ts兴趣甚深,可私信或留言彼此学习进步。
第一步
我们仍然使用npm init来生成一个package,内容如下:

 1 {
 2   "name": "express_babel_demo2",
 3   "version": "1.0.0",
 4   "description": "",
 5   "main": "index.js",
 6   "scripts": {
 7     "test": "echo \"Error: no test specified\" && exit 1"
 8   },
 9   "author": "",
10   "license": "ISC",
11   "dependencies": {
12     "babel-core": "^6.18.2",
13     "babel-preset-es2015": "^6.18.0",
14     "babel-preset-stage-3": "^6.17.0",
15     "babel-runtime": "^6.18.0",
16     "bluebird": "^3.4.6",
17     "express": "^4.14.0"
18   },
19   "devDependencies": {
20     "babel-plugin-transform-runtime": "^6.15.0"
21   }
22 }

可以看到,在我们的依赖中,已经存在babel-core等组件,bluebird是我最喜欢的一个Promise A+实现,性能也是真男人。
第二步
然后我们新建一个.babelrc,用来描述babel的配置:

 1 {
 2     "presets": [
 3         "stage-3",
 4         "es2015"
 5     ],
 6     "plugins": [
 7         [
 8             "transform-runtime",
 9             {
10                 "polyfill": false,
11                 "regenerator": true
12             }
13         ]
14     ]
15 }

我们使用babel官方推荐的transform-runtime来进行启动翻译工作,而不是pollify,虽然后者有更多的功能,但是对于不需要的人来说,那是对原生对象的污染和项目性能的负担。
第三步
新建一个index.js文件,这个是demo的启动文件,代码依旧简单,引入babel、babel翻译和expressjs的入口:

1 require(‘babel-core/register‘);
2 require(‘./app.js‘);
3 require("babel-core").transform("code", {
4     plugins: ["transform-runtime"]
5 });

第四步
编写一个app.js,使用原生fs库异步读取一下package.json文件并输出:

 1 var express = require(‘express‘);
 2 var app = express();
 3 var fs = require(‘fs‘);
 4 var Promise = require(‘bluebird‘);
 5 
 6 app.get(‘/‘, function (req, res) {
 7     testAsync();
 8     res.send(‘Hello World!‘);
 9 });
10 
11 var server = app.listen(3000, function () {
12     var host = server.address().address;
13     var port = server.address().port;
14 
15     console.log(‘Example app listening at //%s:%s‘, host, port);
16 });
17 
18 
19 
20 async function testAsync(name) {
21     console.log("hello");
22     for (let i = 0; i < 3; i++) {
23         let fileContent = await readFile("package.json");
24         console.log(new Buffer(fileContent).toString());
25         console.log(".");
26     }
27     console.log(name);
28 }
29 let readFile = Promise.promisify(fs.readFile);

然后执行一下npm install,会下载依赖
再node index.js启动我们所编写的express demo。
浏览器访问localhost:3000,在控台里就能看到“异步读取、同步输出”的内容了。
   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注WEB前端Node.js频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved