koa

node+js实现大文件分片上传

*爱你&永不变心* 提交于 2020-05-05 19:50:46
1、什么是分片上传   分片上传就是把一个大的文件分成若干块,一块一块的传输。这样做的好处可以减少重新上传的开销。比如:如果我们上传的文件是一个很大的文件,那么上传的时间应该会比较久,再加上网络不稳定各种因素的影响,很容易导致传输中断,用户除了重新上传文件外没有其他的办法,但是我们可以使用分片上传来解决这个问题。通过分片上传技术,如果网络传输中断,我们重新选择文件只需要传剩余的分片。而不需要重传整个文件,大大减少了重传的开销。   但是我们要如何选择一个合适的分片呢?因此我们要考虑如下几个事情:    1. 分片越小,那么请求肯定越多,开销就越大。因此不能设置太小。   2. 分片越大,灵活度就少了。   3. 服务器端都会有个固定大小的接收Buffer。分片的大小最好是这个值的整数倍。   因此,综合考虑到推荐分片的大小是2M-5M,具体分片的大小需要根据文件的大小来确定,如果文件太大,建议分片的大小是5M,如果文件相对较小,那么建议分片的大小是2M。    实现文件分片上传的步骤如下:   1. 先对文件进行md5加密。使用md5加密的优点是:可以对文件进行唯一标识,同样可以为后台进行文件完整性校验进行比对。   2. 拿到md5值以后,服务器端查询下该文件是否已经上传过,如果已经上传过的话,就不用重新再上传。   3. 对大文件进行分片。比如一个100M的文件

《基于Koa我们到底能干啥》之了解Koa

坚强是说给别人听的谎言 提交于 2020-05-04 09:46:51
前言 之所以想到写《基于Koa我们到底能干啥》是因为对于node来说现在大部分前端都还只是停留在如何使用的情况下,并没有像研究Vue、React等等一样去研究node,但是node对于我们前端的发展是必不可少的,因为他是一个服务于前端的后端,首先node肯定不会分配专业的后端去开发node,只能前端自己去开发,那么面对根本没有深入了解过node的同学来说之无疑是很难受的,所以我觉得需要这么一篇文章来带大家去接触node。 选择了Koa而不是express的原因是,express大多数的api已经封装的比较完善了,但是企业级应用需要的是良好的可扩展性,显而易见Koa更加适合。(其实是因为上一篇文章立了一个flag要写koa) koa源码解析 Koa简介 Koa的设计非常精巧,内置的概念只有5个,如下: Application:应用 Context:上下文 Request:请求 Response:响应 Middleware:中间件 基于Koa编写应用时,我们会做以下两类事情: 编写中间件来处理请求 在Application实例、Context实例、Request实例或者Response实例上定义一些工具方法或属性,以便在中间件中使用。 所以,编写Koa应用其实就是在Application、Context、Request、Response

Docker + node(koa) + nginx + mysql 线上环境部署

試著忘記壹切 提交于 2020-05-04 07:58:54
在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建 ,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置也就很简单了 我所使用的环境,Linux Mint,命令有不同可以适当更改 目录结构 - compose 新建,线上环境配置 - data - conf - node_modules - static - docker-compose.yml - docker-compose-prod.yml 新建,线上环境配置 - package.json - server.js - yarn.lock 线上服务配置 我们现在需要3个服务: Node Nginx Mysql 在根目录下compose文件夹内,创建对应的Dockerfile配置文件,mysql是使用的镜像文件,就不用创建Dockerfile compose/node/Dockerfile compose/nginx/Dockerfile 1.Node服务配置 compose/node/Dockerfile FROM node:12-alpine # 使用的基础镜像文件 WORKDIR /code # 工作目录的路径 COPY ./package.json ./server.js /code/ # 拷贝文件到/code COPY .

koa2实现jwt登录

£可爱£侵袭症+ 提交于 2020-05-04 07:34:12
1.jwt介绍 介绍部分转载自阮一峰《JSON Web Token 入门教程》 0.session 登录 1、用户向服务器发送用户名和密码。 2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。 3、服务器向用户返回一个 session_id,写入用户的 Cookie。 4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。 5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。 1.session登录存在的问题 这种模式的问题在于,扩展性(scaling)不好。单机当然没有问题,如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session。 举例来说,A 网站和 B 网站是同一家公司的关联服务。现在要求,用户只要在其中一个网站登录,再访问另一个网站就会自动登录,请问怎么实现? 一种解决方案是 session 数据持久化,写入数据库或别的持久层。各种服务收到请求后,都向持久层请求数据。这种方案的优点是架构清晰,缺点是工程量比较大。另外,持久层万一挂了,就会单点失败。 另一种方案是服务器索性不保存 session 数据了,所有数据都保存在客户端,每次请求都发回服务器。JWT 就是这种方案的一个代表。 2.原理 JWT 的原理是

闲来无事,扒一下Express框架的知识

北城以北 提交于 2020-05-01 22:18:52
❝ 自从Node.js出现之后,相应的web框架就出现了,而且都是比较容易上手和搭建的,框架中都有一个很重要的概念“中间件”,今天就来扒一下其中的奥妙。 ❞ 01 前言 还记得之前面试的时候,我说用过Node搭建了一个小型的后台框架,然后面试官就问了一下你用过什么常用的中间件吗? 我当时知道中间件就是一个类似插件一样,依次执行的东西。虽然我在项目当中也用到了类似body-parser、express.static()这些,奈何年少无知我不知道这就是中间件。现在想想要是再问我中间件原理就更不懂了。 现在的中间件是挺多的,可以满足我们很多的数据处理与请求,我们今天就来看一下中间件这个神奇的东西到底神在哪? 02 认识Express 得益于JavaScript的发展,使得Node诞生了, 能够在服务器端运行JS代码 ,这无疑是令人激动的事情,Express其实就是一个 Node.js Web程序框架 ,简单来说就是快速构建一个“后台”。我们用很简单的代码就可以搭建一个服务器,不用费劲心思来使用其他的语言来搭建,而且其他语言在什么也没干的情况下就出现极多的代码。 Node与其他传统的Web服务器的重大区别就是它是 单线程 的,它可以简化Web程序的编写,如果要实现多线程就启动多个Node实例即可。而且 Node是跨平台的,与平台是无关的

koa-passport Authentication Always Returns 4XX

我是研究僧i 提交于 2020-04-30 11:21:45
问题 When using koa-passport I am always receiving a 404 or 401 error. passport.authenticate( 'local', { successRedirect: '/', failureRedirect: '/login', failureFlash: true } ); 回答1: (This gave me many hours of struggle so wanted to post it here for others.) When using koa-passport you must be sure to both return the result of the authentication, and call authenticate with the context . return passport.authenticate( 'local', { successRedirect: '/', failureRedirect: '/login', failureFlash: true } )

koa-passport Authentication Always Returns 4XX

心不动则不痛 提交于 2020-04-30 11:21:07
问题 When using koa-passport I am always receiving a 404 or 401 error. passport.authenticate( 'local', { successRedirect: '/', failureRedirect: '/login', failureFlash: true } ); 回答1: (This gave me many hours of struggle so wanted to post it here for others.) When using koa-passport you must be sure to both return the result of the authentication, and call authenticate with the context . return passport.authenticate( 'local', { successRedirect: '/', failureRedirect: '/login', failureFlash: true } )

SRP记录_20190418

一个人想着一个人 提交于 2020-04-28 09:16:02
SRP的全名是Student research project (我猜的),对于部分学生来说,不做就相当于不能毕业,一个project大概做一年左右,算是我工的一个特色。本人参加的SRP是做一个编译原理在线教学平台,负责后端开发。 之所以在博客上发周记,目的是想提醒一下自己还有个坑要填。 因为对后端开发感兴趣,想学一下web app开发,做个小项目;而且老师是班主任,还算靠谱,于是就去了。可能是自我介绍吹得好,老师也要了我。 和老师聊了一下,原来老师手上已经有个半成品,但是他不满意,还想继续做下去。仔细看了看代码,是用Vue.js和Node.js做的。 目前整个项目都没有做完,我们这一期的同学也只是改进(我觉得很有可能变成重做)词法分析这部分的功能。 不得不吐槽之前的人真的不懂什么是前后端分离,两份工程居然合到一个工程里去了,导致代码可读性极差,而且前端部分的代码没有任何注释。我看了半天的src文件夹才发现这是前端代码,后端代码居然放在了名为server的文件夹里,让人脑壳疼。 老师着重吐槽了网页的展示效果,明确指出通过读入正则表达式直接给出NFA、DFA的做法不好,教学效果不佳。我表示这方面还需前端的同学多多努力。 老师还吐槽了后端代码结构性非常差,而且bug不少。我大致看了一下,其实是用了框架的(express),但是命名习惯非常不好,搞得老师非常难受

入职字节跳动三个月后...我到底发生了什么改变

自作多情 提交于 2020-04-23 10:09:41
前言 距离我入职字节跳动已经过去了三个多月了,一直以来想写点什么东西来抒发一下我人前显圣的感情,后来发现我错了,三个月过得很 充实 以至于我腾不出时间来写东西了。临近五一该做的需求差不多也已经交付,该踩的坑也踩了,所以现在可以好好审视一下自己三个月到底发生了什么改变。 我发生了什么改变 首先带来的改变是心态上的,有挑战性的工作一个接着一个似乎成为了常态,刚开始的时候我还喜欢跟同一批找实习的同学吹嘘一下我又做了多少个重要的需求和项目,时间久了以后让我慢慢沉淀下来去思考我工作的意义仅仅就是为了跟别人炫耀么,我更在乎的是工作上对我的肯定和信任。浮躁、骄傲、轻狂的我也慢慢的变得深沉了许多。其实公司的日常工作和我想象中的很不一样,文档没有很健全,新人培养也没有很完善,全靠自己野蛮生长。工作方面也没有那么偏技术而是更多的业务落地。不过也好,早一点打破我对程序员的美好幻想!对于加班也看的比较淡了,老实说这个时期加不加班没有啥区别,还不如有点事情去做一做充实一下自己,反正女朋友什么的,这辈子都不可能有的。 其次是处理问题的方面,可以说字节跳动给我带来最大的成长就在于此,技术方面提升不可能一蹴而就,只能说是水到渠成,但是在为人处事方面有了巨大的提升,具体可以表现在对于一个需求去制定方案和考虑风险的能力明显提升,考虑问题更全面,协调也更加到位。具体的提升文字可能表述不太清楚

前端中台名词扫盲

孤街浪徒 提交于 2020-04-21 04:16:29
中台 课堂笔记 什么是中台 以拍电影为例: 我们看到的前台就是产出的电影本身,后台是整个拍摄组,那么中台就相当于横店影视城,提供可复用的场景来供后台使用,比如拍古装、民国片对应的场景,来产出不同的电影。 前台:所见即所得 后台:复杂逻辑 中台:拥有可复用的场景的平台 中台的作用/特点 减少重复劳动、赋能、平台化 中台的划分 主要分为:前台与后台之间的中台、技术中台、业务中台、组织中台 举例: GraphQL、FireBase、Kubernetes、PostgREST、LeanCloud等 除此之外还有两种特殊的 孵化中台的中台:例如Spark、Storm等,可以孵化语音识别、人脸识别的AI中台,而这些孵化的中台可以给其它项目来用 调度中台的中台:比如淘宝会把很多中台产出的项目合成到一个时间线上,这些都是需要有一个中台来调度 涉及到的代码概念 元数据(metadata):用来描述数据的数据,比如下图中常见的请求头和响应头 高阶函数 处理函数的函数(arr.reduce) 返回函数的函数 (koa中 app.use()) Proxy server:代理服务器 ES6 Proxy: 方便开发者劫持对对象的操作 getter/setter Function call/construct 来看下面这段代码,axios,从空对象空手套白狼,来拦截get方法,一层层拦截name,method属性