node 使用koa2 异步读文件
目的:在一个文件夹(image)中有很多文件夹和文件,排除掉文件,将所有文件夹找出来
知识点:
async 函数与 await 。只有在async函数内部,才能使用await,await等的必须是promse对象,当promise对象resolve()时,await语句执行完毕。
koa2 app.use() 中,ctx.body不能放在异步环境中。
const http = require('http')
const fs = require('fs')
const koa = require('koa')
const app = new koa()
app.use(async function (ctx, next) {
ctx.res.setHeader("Access-Control-Allow-Origin", "http://localhost:8080")
await next() // 执行下一个app.use,当下一个app.use执行完过后,在接着执行下面的语句
console.log('4')
})
app.use(async function (ctx, next) {
let files = []
let newfiles = []
await new Promise((resolve, reject) => { // 读image文件夹
fs.readdir (__dirname + '/static/image', function(err, picFiles) {
if(err) ctx.throw(err)
files = picFiles // 将所有的文件夹名字放到外面来。
console.log('1')
resolve() // resolve过后,await语句才结束
})
})
const stats = function (fileName) {
return new Promise((resolve, reject) => {
fs.stat(__dirname + '/static/image/' + fileName, function (err, file) { // 查看是否是文件夹
if(file.isDirectory()) newfiles.push(fileName)
console.log('2')
resolve()
})
})
}
let promises = files.map(file => stats(file)) // *这儿使用map() 它返回的值组成新的数组promises,每个元素都是stats()函数返回的promise对象。
await Promise.all(promises) // 当所有promise都resolve()后 执行下一步
console.log(3)
ctx.body = newfiles // 这个必须放在外面,不能放在promise.all().then()中
})
app.listen('80', '127.0.0.1')
node 使用koa2 异步读文件的更多相关文章
- Linux通过AIO进行异步读文件
下面列出源代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <a ...
- node.js学习(5)读写文件(同步异步)
1 导入文件系统库 # 同步的 读文件 写文件 # 异步 需要用异步处理耗时
- 【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制
转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93% ...
- node核心:异步流程控制
Node.js的异步是整个学习Node.js过程中重中之重. 1)异步流程控制学习重点 2)Api写法:Error-first Callback 和 EventEmitter 3)中流砥柱:Promi ...
- 分享Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站
这是个什么的项目? 使用 Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站. 博客线上地址:www.boblog.com Github地址:https: ...
- 极简 Node.js 入门 - 3.2 文件读取
极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...
- node中的可读流和可写流
javascript的一个不足之处是不能处理二进制数据,于是node中引入了Buffer类型.这个类型以一个字节(即8位)为单位,给数据分配存储空间.它的使用类似于Array,但是与Array又有不同 ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...
随机推荐
- 将DLL文件直接封装进exe执行文件中(C#)
前言:由于项目需要,需制作一个注册机,将个人PC的MAC值和硬盘序列号与软件进行绑定,由于笔者的C++不是很好,所以采用C#进行开发.但在采用C#的时候,获取硬盘的MAC值和序列号的时候又不是很准确, ...
- Angular页面加载闪现解决方案 ng-cloak
在做Angular项目时,经常会遇见在浏览器上闪烁表达式({{ express }} ),及模块(div)的闪烁,会闪现/闪烁隐藏的数据,之前用过vue.js,可以通过v-clock解决,同理Angu ...
- OI大佬博客集
郭家宝:byvoid 早年大牛,题解更新到2014年,其博客内容非常丰富,不止题解 hzwer:hzwer 从OI到ACM,一直在更新 陈立杰:WJMZBMR 无需解释,不过貌似只更到2015 顾森 ...
- springBoot actuator监控配置及使用
准备环境: 一个springBoot工程 第一步:添加以下依赖 <dependency> <groupId>org.springframework.boot</group ...
- Python的集合
1. Python的集合 1.1 集合的定义 在Python中, 集合set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.Python中的集合set类 ...
- java学习笔记IO之File类
File类总结 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times } p.p2 { margin: 0.0px 0.0px 0.0p ...
- 多版本VisualStudio导致的.net版本问题
写在前面:本博文是在我现有知识状态下写的, 我现在是小白, 有错误欢迎指正. 以后假如接触到更合理的见解, 我一定会修正这篇博文的. 本文原是在我本地笔记中待着的, 写于2016/05/17. 下 ...
- hdu4893 Wow! Such Sequence!
线段树结点上保存一个一般的sum值,再同一时候保存一个fbsum,表示这个结点表示的一段数字若为斐波那契数时的和 当进行3操作时,仅仅用将sum = fbsum就可以 其它操作照常进行,仅仅是单点更新 ...
- 蓝牙核心技术概述(五):蓝牙协议规范(irOBEX、BNEP、AVDTP、AVCTP)
关键词:蓝牙核心技术协议 irDA BNEP AVDTP AVCTP 作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢! )欢迎指正错误,共同学习.共同进步!! 下载链接:Bl ...
- 【Jquery系列】JqGrid参数详解
1 概述 本篇文章主要与大家分享JqGrid插件参数问题. 2 参数详解 2.1 初始化参数 2.2 ColModel参数 3 json数据 jqGrid可支持的数据类型:xml.jso ...