async/await
概念
- 现在最常用的异步编程方案
- async 函数是 Generator 函数的语法糖
- 具备特点
① 内置执行器:Generator 函数的执行必须依靠执行器,而 async 函数自带执行器,调用方式跟普通函数的调用一样
② 更好的语义:async 和 await 相较于 * 和 yield 更加语义化
③ 更广的适用性:co 模块约定,yield 命令后面只能是 Thunk 函数或 Promise对,而 async 函数的 await 命令后面则可以是 Promise 或者 原始类型的值(Number,string,boolean,但这时等同于同步操作)
④ 返回值是 Promise:async 函数返回值是 Promise 对象,比 Generator 函数返回的 Iterator 对象方便,可以直接使用 then() 方法进行调用
使用
- async 是“异步”的简写, async function 用于申明一个 function 是异步的; await,可以认为是async wait的简写,用于等待一个异步方法执行完成;
- async/await是一个用同步思维解决异步问题的方案(等结果出来之后,代码才会继续往下执行)
- 可以通过多层 async function 的同步写法代替传统的callback嵌套
在项目中如果要使用async/await,需要安装和配置transform-runtime
步骤
npm i babel-plugin-transform-runtime -D
配置.babelrc
"plugins": [
"transform-runtime"
]
不安装则会报错
编译代码时报 regeneratorRuntime is not defined
错误
MVC模式设计
- 在Controller文件夹中新建SowingController.js
- 将sowing.js中业务逻辑抽到SowingController.js中
在SowingController.js中新建函数insertOneSowing()并将插入一条新纪录业务逻辑从sowing.js中转移到该函数中,通过async
声明该函数是异步函数。 - 用
async/await
的方式替换callback()
替换后的数据库操作 - sowing.js中引入SowingController.js
- 修改之前的路由
端口号配置
各个环境下,nodejs可以通过process.env.PORT去设置端口号
比如
-
linux环境下
PORT=1234 node app.js
使用上面命令每次都需要重新设置,如果想设置一次永久生效,使用下面的命令export PORT=1234
node app.js
-
windows环境下
set PORT=1234
node app.js
package.json配置文件"scripts": { "start": "set PORT=8888 && node ./bin/www" },
实操
-
config.js
port: parseInt(process.env.PORT, 10) || 3000,
-
app.js
app.listen(config.port, () => { console.log(`server is running, port:${config.port}`) });
中间件session抽取
config.js
实操
secret: 'itlike.com',
name: 'likeid',
maxAge: 365 * 24 * 60 * 60 * 1000,
db_url:'mongodb://localhost:27017/school'
集成插件chalk
- 简介:chalk是一个颜色的插件。可以通过 比如: chalk.blue(‘hello world’)之类的方法来改变颜色
- 使用
下载:$ npm install chalk
引入:import chalk form 'chalk'
显示:console.log(chalk.blue('Hello world!'));
封装数据库连接
-
简介:全局连接数据库
-
实操代码
首先新建db.js,并在app.js中导入db.js,使每一次访问时首先连接数据库'use strict'; import mongoose from 'mongoose'; import config from './../src/config'; mongoose.connect(config.db_url, {useNewUrlParser: true}); mongoose.Promise = global.Promise; const db = mongoose.connection; db.once('open' ,()=>{ console.log('连接数据库成功'); }); db.on('error', (error)=>{ console.error('连接数据库时发生错误: ' + error); mongoose.disconnect(); }); db.on('close', function() { console.log('数据库断开,重新连接数据库'); mongoose.connect(config.db_url, {server:{auto_reconnect:true}}); }); export default db;
全局配置服务器地址
新建config.js,并在其中利用闭包进行配置
(function (window) {
window.LK = {};
LK.SERVER = 'http://localhost:3000/'
})(window);