实战Node—幼教平台项目重构和优化
后端
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);
实战Node—幼教平台项目重构和优化相关推荐
- python与selenium_项目篇_项目实战、代码优化、项目重构
实战只想说一句:那就是结合你现在所在的项目,去写覆盖基本功能的用例吧.碰到一个问题,解决一个问题,坚持不懈,你终究完成. 背景:代码是携程网预定票的过程. (1)文件目录,各目录代码 (2)代码优化. ...
- 【.NET Core项目实战-统一认证平台】第六章 网关篇-自定义客户端授权
上篇文章[.NET Core项目实战-统一认证平台]第五章 网关篇-自定义缓存Redis 我们介绍了网关使用Redis进行缓存,并介绍了如何进行缓存实现,缓存信息清理接口的使用.本篇我们将介绍如何实现 ...
- 实战录 | 浅谈前端项目构建与优化
<实战录>导语 云端卫士的新栏目<实战录>将会定期分享一些我们的工程师伙伴们在产品研发的过程中总结的实践经验,希望对于热爱技术且关注安全领域的受众有所裨益.本期分享人为云端卫士 ...
- 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)
[.NET Core项目实战-统一认证平台]第三章 网关篇-数据库存储配置(1) 原文:[.NET Core项目实战-统一认证平台]第三章 网关篇-数据库存储配置(1) [.NET Core项目实战- ...
- 【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式
上篇文章我介绍了如何强制令牌过期的实现,相信大家对IdentityServer4的验证流程有了更深的了解,本篇我将介绍如何使用自定义的授权方式集成老的业务系统验证,然后根据不同的客户端使用不同的认证方 ...
- 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程...
上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成acce ...
- 【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式
上篇文章介绍了基于Ids4客户端授权的原理及如何实现自定义的客户端授权,并配合网关实现了统一的授权异常返回值和权限配置等相关功能,本篇将介绍密码授权模式,从使用场景.源码剖析到具体实现详细讲解密码授权 ...
- 【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权
上篇文章介绍了如何使用Dapper持久化IdentityServer4(以下简称ids4)的信息,并实现了sqlserver和mysql两种方式存储,本篇将介绍如何使用ids4进行客户端授权. .ne ...
- 【.NET Core项目实战-统一认证平台】第九章 授权篇-使用Dapper持久化IdentityServer4...
上篇文章介绍了IdentityServer4的源码分析的内容,让我们知道了IdentityServer4的一些运行原理,这篇将介绍如何使用dapper来持久化Identityserver4,让我们对I ...
- 【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析
上篇文章我介绍了如何在网关上实现客户端自定义限流功能,基本完成了关于网关的一些自定义扩展需求,后面几篇将介绍基于IdentityServer4(后面简称Ids4)的认证相关知识,在具体介绍ids4实现 ...
最新文章
- DPDK 初识DPDK(十五)
- Java时间日期格式转换
- git git git
- Python爬取京东商品信息以及评论存进MySQL
- python中ans的用法_Python的一些用法分享
- C# string类型和byte[]类型相互转换
- Java常用API (四) 包装类
- el-table列宽设置百分比无效;el-table使用min-width设置百分比;el-table百分比设置无效;
- iphone闪退修复工具_升级 iOS 14.2 微信闪退?iPhone 12 维修贵
- 等值首尾和-----------2012年12月27日
- 关于简历的一点心得(纯属个人想法,非专业人士,欢迎批评指正~)
- bzoj 1432: [ZJOI2009]Function
- git maven 一键部署_jenkins+git+maven搭建自动化部署项目环境
- oracle erp 用户手册,oracleerp用户手册-mrp
- yoga710怎么进入bios_联想yoga进入bios
- 各种手段终于将土豆视频url请求找到了
- 为intent添加FLAG_EXCLUDE_STOPPED_PACKAGES标记
- javascript高级一
- APFS 苹果文件格式的小介绍 Apple File System
- 魔剑魂断红颜java_“梦回大唐爱,醉卧君王怀”是出自哪首诗?