Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all 14821 articles
Browse latest View live

基于vue的记事本应用 vuememo - 更新

$
0
0

新版本更新支持 Markdown 形式的笔记,支持导出 .png 格式的笔记图片,复制内容到剪贴板方便分享,支持将所有笔记数据导出为 JSON 格式的文件等。

VUEMEMO

基于 Vue.js 的简单记事本 SPA 。Mint-UI、Vue、VueRouter、Vuex,使用localStorage作为数据本地持久化,并支持使用Markdown格式笔记,主要功能有增查改删笔记、按条件过滤和排序笔记、并支持文字和图片等形式的笔记.

Vue.js-based simple notepad SPA. Mint-UI, Vue, VueRouter, Vuex, the use of localStorage as local database(storage), and support the Markdown formatting language, the main features are increased check delete notes, conditional filtering and sorting notes , And supports notes in the form of words and pictures.

DEMO

点击这里看演示:DEMO

源代码:github


BUILD SETUP

# 安装依赖
npm install
# 开发模式localhost:8080
npm run dev
# 打包构建
npm run build

主要功能

  • v1
    • ✔️响应适配 Responsive
    • ✔️创建、修改笔记 create or modify notes
    • ✔️删除部分或全部笔记 delete notes or drop all data
    • ✔️查看笔记详细内容 read the note content
    • ✔️标记笔记是否完成 check if completed
    • ✔️切换笔记显示模式 switch display mode
  • v2
    • ✔️按是否完成进行过滤 filter by completed
    • ✔️按创建时间排序 sort by timestamp
    • ✔️按类别进行过滤 filter by type
    • ✔️收藏、取消收藏和显示收藏笔记 star or unstar
    • ✔️通过 localStorage 对象的数据本地持久化 user data stored in localStorage
  • v3
    • ✔️支持Markdown格式 support Markdown
    • ✔️以图片的形式保存笔记 save note as img(.png)
    • ✔️复制笔记内容到剪贴板 Copy the note content to clipboard
    • ✔️导出全部笔记至 JSON 文件格式(Blob) export all notes to JSON file
  • v4
    • 实时保存笔记 save note in real time
    • 定时推送提醒通知 notifications
    • 通过base64支持保存图片 save the image via base64
    • 通过Canvas支持绘图 draw in canvas

文件目录

├── App.vue
├── assets // 静态资源
├── components // 组件
|  ├── Header.vue // 导航栏
|  ├── Index.vue // 主页
|  ├── MemoItem.vue // 笔记文档
|  ├── ModifyMemo.vue // 修改笔记界面
|  ├── NewMemo.vue // 新建笔记界面
|  ├── Preview.vue // 预览 MD 笔记
|  ├── ShowMemo.vue // 查看笔记界面
|  └── Tabbar.vue // tabbar栏
├── main.js
├── router // 路由
|  └── index.js
├── store // 全局 store 管理
|  ├── action.js
|  ├── index.js
|  └── mutation.js
└── utils // 全局共用方法
   └── index.js

MESSAGE ME


快速排序(《图解算法》笔记)

$
0
0

学习分而治之(divide and conquer, D&C)——快速排序

###书中先讲了一个小案例,如果将一块长方形土地均匀分成方块,且分出的方块要尽可能大 两个要点:

  • 找出基线条件,这种条件必须尽可能简单
  • 不断将问题分解,直到符合基线条件(递归条件

案例分析 基线条件:一条边是另一条边的整数倍 递归条件:长边整除短边划出区域,剩余区域继续调用基线条件和递归条件

答案:1680 * 640的土地,按短边整数倍长分出2640640的区域,剩余区域为640400; 第二步分出240240区域,剩余区域为240160;第三步分出160160区域,剩余区域为160*80;因为160为80整数倍,所以可均匀分出的方块边长为80

ps: 该结论可搜索欧几里得算法

###快速排序

  • 对于[]或者[1]这类数组,是不需要排序的,这是快速排序的基线条件

对于[33, 15, 10]这种数组应该怎么做呢? 首先,从数组种选择一个元素,这个元素被称为基准值(pivot) 然后根据剩余元素对比基准值,可分成小于基准值的数组和大于基准值的数组(递归条件) 最后,将两个数组再用此方法排序,直到满足基线条件,将两个数组和基准值相结合 得到[15, 10], 33, [], 再将[15, 10]做排序得[10], 15, []相结合得[10, 15, 33]

案例分析 基线条件:数组长度小于2 递归条件:选择其中一个元素作为基准值,与剩余元素比对,分割成小于和大于两个数组

答案(js版本):

function qsort(arr) {
  if (!(arr instanceof Array)) throw new Error('arr is not a Array');
  if (arr.length < 2) return arr;
  var pivot = arr[0];
  var less = [];
  var greater = [];
  for (i = 1; i < arr.length; i++) {
    if (arr[i] < pivot) less.push(arr[i]);
    else greater.push(arr[i])
  }
  return qsort(less).concat([pivot]).concat(qsort(greater));
}

分享我自己开发的移动端代理调试抓包工具Mobile Debug for Mac,支持win/macos

$
0
0

mac版地址:https://www.jscompress.cn/Mac/mobile-debug.shtml windows版本地址:https://www.jscompress.cn/mobile-debug.shtml
. . . ###代理抓包/网页调试/请求劫持/HTTPS支持/跨平台/免费使用

他们在功能上保持一致,以mac版为例: image.png

安装完软件后打开软件,勾选[绑定代理端口并启用调试功能],等待状态切换为[打开调试界面],点击调试界面会打开浏览器进入到真正的管理界面.

. . . ###设置Mobile Debug for Mac代理,抓取移动端设备请求数据

1.进入【请求捕获列表页】,单击右上角的【接入新设备】 image.png

2.根据您要接入的设备类型选择【Android】或者【iPhone】然后点击【下一步】,他们在后续的提示引导上有略微的细节差异。 image.png

3.将您准备接入代理的设备连上局域网wifi(需要可以访问Mobile Debug for Mac所在Macos的网络),然后使用待接入设备扫描并访问ip检测二维码(建议做检测,如果您只有1个网卡,可以跳过这个步骤)。 image.png

通过检测的网卡会被标识为【已通过检测,可使用】,然后点击【下一步】。 image.png

4.选择调试接入模式为【代理捕获注入】,然后点击【下一步】 image.png

5.将界面提示的主机名和端口按照界面下方的提示设置到您待接入的设备的已连接的当前wifi配置中 image.png

到此,设置完毕后您可以使用接入设备的浏览器 访问http的站点了。

如果您想查看https的链接数据,那么您需要在处理完【第5点】后,为接入设备安装测试证书,否则接入设备访问https的请求将被设备标记为不可信任而被阻止。

如何安装测试证书?

继续点击【下一步】使用已经设置好代理的接入设备,扫描或者访问界面提供的二维码或者网址,如图:

image.png

按照界面上的图片提示步骤安装好测试证书即可。

image.png

到此设置完毕,点击完成退出新设备引导界面。

此时,使用设置好的代理访问网页即可在列表中查看:

image.png单击【列表】中的链接或者双击【所在行】即可查看该次请求的详细数据:

image.png

image.png . . . ###通过[调试注入规则]配合代理模式调试移动端设备上的网页

在使用添加【调试注入规则】调试网页之前,请先确认您已成功设置Mobile Debug for Mac代理并可正常访问网络。

1.打开【调试注入规则管理】列表页,点击右上角的【添加调试注入规则】 image.png

2.选择【匹配方式】,我们建议您使用【域名】匹配,慎用【正则表达式】匹配,如果您只想调试部分网址,可以使用【起始匹配】模式。

【匹配值】是依据【匹配方式】的不同填写的规则。

【域名】匹配方式:

ߦ本规则不含端口号,如果你需要调试指定端口号域名请选择起始匹配模式ߦ本规则不区分大小写ߦ本规则匹配包含子域名若你填入jscompress.cn,则你可以匹配到如:https://www.jscompress.cn/mobile-debug.shtml?a=1http://jscompress.cn/?a=2&b=3等类似的请求

image.png

【完整匹配】匹配方式: ` ߦ本规则不区分大小写` ` ߦ请注意,http网络请求中是不包含url中hash部分的,如 ?abc=1#def=2`如你要调试的网址url为https://www.jscompress.cn/mobile-debug.shtml?a=1,则你需要填入https://www.jscompress.cn/mobile-debug.shtml?a=1,任何url上的差异都将无法命中该规则 `` image.png

【起始匹配】匹配模式: ` ߦ本规则不区分大小写`若你填入https://www.jscompress.cn/mobile-debug.shtml,则你可以匹配到如:https://www.jscompress.cn/mobile-debug.shtml?a=1https://www.jscompress.cn/mobile-debug.shtml?a=2&b=3等类似的请求

image.png

【正则表达式】匹配模式 `` ߦ本规则不区分大小写ߦ建议对正则表达式有了解的用户使用,错误的正则表达式将影响程序性能.

image.png

配置完毕后,点击右上角的确定保存即可。

此时使用配置好代理的接入设备访问需要调试的网页,您可以在【请求捕获列表】中看到如下图的标识,该标识表示该网页已按照您配置的规则注入了调试代码:

image.png

同时您可以在调试列表中看到被调试页面的状态,单击列表项进入对应的页面调试:

image.png

image.png . . . 关于网页控制台的基本介绍,如果有兴趣,可以移步这里查看:https://www.jscompress.cn/Mac/Help/help_10061.shtml

Antd 现在有没有动态修改主题颜色的方法?

$
0
0

官方只给出了在编译less时覆盖样式变量的方法,没有在页面中动态修改主题颜色的方法 但官网右下角有一个可以动态修改主题色的颜色选择器 image.png看起来像是用js生成了需要改动的css来覆盖默认颜色 image.png这个功能有没有什么合适的实现方法?


看起来Antd官方并没有提供动态修改主题的功能
在github上有一个关于ThemeProvider的讨论,似乎短期内也不会考虑实现该功能
现在的办法就是像该讨论底部给出的方案,每个主题各构建一份css
但这样的话更换主题时就相当于要重新加载整个css文件
webpack也没找到能将指定css文件单独分离出来的办法(如果构建时能单独把antd的css文件分离出来会好很多,但是extract-text-webpack-plugin似乎只能将所有css一起提取出一个文件)

请教大神解答,node中的ejwt模块是做什么的,有没有网址可以详细解答的?

[北京-中关村] 15-25K 多贝云(A股上市)诚招Node.js后端工程师(构建全球实时消息系统)[可实习]

$
0
0

关于我们

多贝教育集团:互联网教育行业领航品牌,致力于探索和实践“科技互联网+教育”的技术创新和商业模式,凭借十余年多媒体通信领域的技术积累,已成为成熟的音视频传输、智能分布式分发、教育直播及远程互动教学解决方案的权威专家和领先品牌。

5D教室:2016年2月,多贝教育集团全新产品“5D教室远程互动教学解决方案”正式上线,将已有的成熟音视频直播技术与优质硬件相结合,在解决跨地域、线上线下结合、远程同步教学的应用场景下取得重大突破。

多贝云:行业领先的一站式教育直播技术解决方案提供商,国内首家实现单教室支持万人直播的平台,是中国用户量最大的教育直播云和行业大数据中心,能够真正做到直播稳定流畅、低延时、高并发。服务器全球化部署,彻底解决跨国传输问题,是目前在国内唯一真正实现“覆盖欧美亚”、“无延迟”、“强互动”的教育直播技术服务提供商。

  • 每天有20W+的课程,并发10W+人
  • 全球上百节点,3000余台服务器
  • 教育领域国际带宽采购量最大的公司(没有之一)

目前团队总共40余人,30多人都是工程师。只要有意愿、有能力,就可以尝试、探索新技术,绝对有足够的空间,足够的挑战。

职位介绍

Node.js 后端工程师

如果你:

  • 擅长 JavaScript 或 Go 语言
  • 擅长 Node.js
  • 熟悉至少一种NoSQL数据库,包括但不限于Redis、MongoDB、Cassandra
  • 对Linux相关的各类技术情有独钟,熟悉TCP/IP、HTTP协议以及网络编程
  • 了解测试的重要性,熟悉测试驱动开发;
  • 追求架构和代码的极致优雅
  • 良好的英文阅读能力
  • 熟练使用 Git

加分项:

  • 参与构建过高并发的分布式实时通信系统
  • 熟悉微服务架构,对基于容器(Docker)的构建部署有一定了解
  • 了解 gRPC、Socket.io等技术
  • GitHub 有不错的后端项目

你将负责:

  • 参与分布式高并发消息服务器的研发,为上层业务提供稳定、低延迟的消息系统。
  • 持续提升服务性能和改进系统架构

联系方式

如果你对Node.js后端感兴趣,请把简历(最好还有Github地址)一并发到 siyuan.wang@duobei.com。 招靠谱的人做他喜欢做的事。

有人觉得nodeclub的数据库设计的不太合理吗?

$
0
0

RT 我也是新手,弱弱的问一句,大神勿喷。

好多请求需要ep查询多次,这样设计好吗?假如一次请求需要ep处理非常多的查询,服务端执行时间甚至>200ms,这正常吗?

ps:我正在二次开发个东东,求高手指点

我的查询过于复杂, [2018-03-01 07:18:17.939] [INFO] cheese - Render view index (47ms) [2018-03-01 07:18:17.942] [INFO] cheese - Completed 200 (250ms)

时间吓人啊

是否修改设计,改用populate会好一些,还是有其他的方式?求指导

求助:关于puppeteer,headless:true的时候报错:Navigation Timeout Exceeded: 30000ms exceeded

$
0
0

求助:关于puppeteer,headless:true的时候报错:Navigation Timeout Exceeded: 30000ms exceeded,当把headless:true设置为false的时候也就是让浏览器弹出来 ,就没问题, 有人能帮帮吗 untitled1.png


Sails 中 model 里的外键字段的设置问题

$
0
0

以官网的文档为例,似乎不可以在 pet.js 里再添加一个 userId 的外键 attribute?但是我只想获取到这个外键怎么办,不要需要把关联表所有数据都拿出来。

// myApp/api/models/User.js
// A user may have many pets
module.exports = {
  attributes: {
    firstName: {
      type: 'string'
    },
    lastName: {
      type: 'string'
    },

    // Add a reference to Pets
    pets: {
      collection: 'pet',
      via: 'owner'
    }
  }
};
// myApp/api/models/Pet.js
// A pet may only belong to a single user
module.exports = {
  attributes: {
    breed: {
      type: 'string'
    },
    type: {
      type: 'string'
    },
    name: {
      type: 'string'
    },

    // Add a reference to User
    owner: {
      model: 'user',
	  columnName: 'user_id'
    }
	// 这里再加一个 userId 是不行的,会提示和上面 owner 公用了一个 columnName
	userId: {
	     columnName: 'user_id',
	}
  }
};

解决使用 KeepAlive Agent 遇到的 ECONNRESET

$
0
0

问题背景

自从 Node.js 8.0 开始,http server 增加了一个默认配置keepAliveTimeout = 5000,它会自动销毁超过 5 秒的空闲连接。

通过 node-modules/agentkeepalive#58的示例代码,非常容易重现出服务端 Keep Alive 超时的效果,就是客户端复用「Keep Alive」 的 socket connection 会立刻触发 ECONNRESET异常,因为此 socket 已经被服务端认为空闲超时强制断开了。

现状

在 Egg 里面为了尽可能避免此问题的发生,综合 Node.js 的 keepAliveTimeout和 Nginx 的 keepalive_timeout 常规配置,将 httpclient 的 freeSocketKeepAliveTimeout配置为 4 秒,尽可能避免 ECONNRESET异常发生。

缺点:无法 100% 解决所有问题。由于这是一个靠约定俗成的配置,和一些不稳定性因素的存在,还是有可能遇到本文所描述的问题。例如服务端 keepalive_timeout 被配置为 4 秒,默认的 Egg 配置也就失效。

更好的解决方案

如果服务端告诉客户端当前 socket connection 会被保留多长时间呢?是否就能解决这个问题了? 如服务端在 Response header 中告诉客户端,当前 socket connection 还可以使用 5 秒,那么客户端通过计算,加上网络延迟 500 毫秒,最终得出当前 socket connection 只能用 4.5 秒。

下一个请求间隔在 4.5 秒内,则客户端继续使用这个 socket connection; 下一个请求间隔在 4.5 秒外,则客户端创建一个新的 socket connection 来请求。

业界事实标准:Keep-Alive Header

Google 一番发现业界有一个事实标准:The Keep-Alive Header。它竟然被所有浏览器都支持!

例如,通过 Response Header 告诉客户端当前 socket connection 还可以使用 5 秒,示例如下:

"Keep-Alive: timeout=5"

nginx 开启

配置 keepalive_timeout 的第二个参数:

keepalive_timeout 5 5;

_特别提示:_nginx 一旦配置了 keepalive_timeout,那么它会覆盖 web server 返回的 Keep-Alive header。所以你的应用前面有 nginx,那么必须配置第二个参数才会让 Keep-Alive header 返回给客户端。

Egg 开启

升级到 Egg 的最新版本,默认已经支持。

通过以下 2 个 PR 支持:

参考

原文

原始文章来自 egg.js 团队的 Node.js 经验分享:Node.js 专栏

蚂蚁金服实习生招聘

蚂蚁金服2019届实习生校园招聘已经开启,非常欢迎大家加入我们!详情请查看 https://cnodejs.org/topic/5a9627e32580af301494a8f8招聘帖子。

mac 下的斗图神器 - 根据关键字搜索表情,一键复制

egg反向代理获取ip一直是127.0.0.1

$
0
0

试了nginx和apache,用的是网上搜到的方法,但是this.ctx.ip一直是127.0.0.1,不知为何。 一定是我学艺不精,提前谢谢大佬。

vs Code

$
0
0

为什么vs Code 按F5自动弹出浏览器? 之前用vs Code 启动nodeJS都是按F5 自动然后输入localhost:3000就能启动访问的的;

【上海】Nequal上海研发中心10-25K招聘js全栈开发1名

$
0
0

目前的主要产品是数据可视化相关的前端产品,主要技术栈是Koa和React,UI库重度使用ant-design。现在需要找一个人和我一起整理和维护一下现有的开发框架,包含服务器端以及浏览器端,以提高开发效率和增强稳定性。所以要求你至少要有相关技术的使用经验(Koa,React,Redux),基本的linux和docker的使用也是基础要求,另外我希望你至少有过一个Nodejs相关web framework的研发经历,最好有实际上线的应用案例。当然待遇方面10-25K只是一个范围,不是死的,如果我们确实聊得很投机,都可以谈,不要被这个范围限死

不需要你自觉牛逼,只需要你脚踏实地,不吹不擂,对技术有热情,对代码有适当洁癖就可以了。如果你觉得我们有缘,发邮件到garbin@nequal.com 我们聊聊。

如果找到了合适的人,我会来把此贴删掉,所以如果你还看到这个帖子,请随时给我邮件

Express 路由问题

$
0
0

Express 的路由支不支持别名啊, 只有重定向(官网我只发现重定向,没找到别名),很难受, Express还会不会更新??


我想把swig引擎换成ejs引擎,原.html代码改成.ejs代码,该如何改写?

$
0
0
  • pakage.json中 "dependencies": { “body-parser”: “^1.18.2”, “cookies”: “^0.7.1”, “express”: “^4.16.2”, “mongoose”: “^5.0.3”, “swig”: “^1.4.2” }
  • 路由api.js中 //配置swig动态模板引擎 app.engine(‘html’, swig.renderFile); app.set(‘views’, ‘…/views’); app.set(‘view engine’, ‘html’); swig.setDefaults({cache: false});
  • 我想把swig引擎换成ejs引擎

那原index.html代码该如何在html.ejs中写呢 片段index.html代码:

<!–首页及分类主显示区内容–> {% extends ‘layout.html’ %}

{% block content %}

{% if count > 0 %} <!–文章列表–> {% for content in contents %}

<div class="listBox">
    <h1>{{content.title}}</h1>
    <p class="colDefault">
        时间:<span class="colInfo">{{content.addTime|date('Y-m-d H:i', -8*60)}} &nbsp;</span>
        阅读:<span class="colInfo">{{content.views}} &nbsp;</span>
        评论:<span class="colInfo">{{content.comments.length}}</span>
   </p>
    <dfn><p>{{content.description}}</p></dfn>
   <div class="function"><a href="/view?contentid={{content.id}}">阅读全文</a></div>
</div>
{% endfor %}
<!--文章列表分页-->
<div class="pager">
    <ul class="clear">
       <li class="previous">
           {% if page <= 1 %}
           <span>第一页</span>
           {% else %}
           <a href="/?category={{category}}&page={{page-1}}">上一页</a>
           {% endif %}
       </li>

       {% if pages > 0 %}
       <li>
           <strong>{{page}} / {{pages}}</strong>
       </li>
       {% endif %}

        <li class="next">
            {% if page >= pages %}
            <span>最后一页</span>
            {% else %}
            <a href="/?category={{category}}&page={{page+1}}">下一页</a>
            {% endif %}
        </li>
    </ul>
</div>

{% else %} <div class=“listBox”> <p class=“colDefault”>该分类暂无文章</p> </div> {% endif %}

{% endblock %}

来自酷炫的 CNodeMD

[深圳/杭州]阿里巴巴-国际技术事业部-资深研发/技术专家招聘

$
0
0

业务背景

承载着阿里的初心“让天下没有难做的生意”,阿里巴巴国际站(Alibaba.com)是全球最大的跨境B类一站式贸易与服务平台。在这里来自全世界的B类买家与卖家可以获得高效的沟通,安全的交易,稳定的履约保障,以及超值的增值服务。占有中国整体跨境贸易份额90%以上的B2B模式,是全球贸易繁荣的基础。阿里巴巴国际站(Alibaba.com)将作为“全球买全球卖”战役的主力部队,为阿里集团的国际化战略奠定坚实的基础。

2017年11月3日下午,随着纳吉布与马云共同鸣锣三声,阿里巴巴首个海外eWTP试验区——Alibaba.com马来西亚数字自由贸易区在吉隆坡全面启用运营。 image.png

国际技术事业部致力于通过特色的国际化技术体系,运用大数据与智能计算能力,打造安全高效的eWTP平台,用技术的力量拓展阿里集团国际化的商贸边界。

希望寻找这样的您

参与和主导国际业务、商家业务的标准化建设和对外能力输出;为前后端技术协同改进、开发效率提升、技术选型提供解决方案;与组员一起快速成长,能够通过你的方式激励团队,不断提升架构能力,通过技术探索、设施建设等促进业务发展。

  1. 精通各种Web前端技术(HTML/CSS/Javascript等),熟练跨浏览器、跨终端的开发;
  2. 有大型网站前端架构、前端性能、可访问性、可维护性等方面的实践经验;
  3. 至少熟练使用一门非前端脚本语言(如:NodeJS /Java/Python/PHP等),并有一定的项目经验;
  4. 技术视野广阔,有主导前端技术方案(视图层/接入层)设计的能力和经验;
  5. 个性乐观开朗,逻辑性强,善于和各种背景的人合作,有一定的项目管理、团队协同经验;
  6. 英语口语流利、有国际化背景和经验者优先。

薪酬福利

阿里巴巴集团每年都参加同行业的薪酬福利市场调研,以确保公司员工的薪酬在同行业内具备良好的竞争力;同时根据业绩导向,为不同的职能人员制定了完善的绩效奖金计划或业务提成计划,同时对于特别优秀的同学,有上不封顶的薪酬回报和独特的培养体系。 https://campus.alibaba.com/salary.htm

工作地点

真正的面向大海编程image.pngimage.png

3月24号 - 深圳专场

3月24号,将在深圳举行专场面试,与技术大牛面对面交流,获得极速面试反馈,我们在深圳等您。 简历请发送至:yanxi.tyx#alibaba-inc.com, 或在官网投递 https://job.alibaba.com/zhaopin/position_detail.htm?positionId=47389

期待您的加入!

Vue,React,Angular,最应该精通的是哪个框架呢?

$
0
0

一个个学过来,会疯掉的:(

div怎么加失去焦点事件

$
0
0

加了tabindex但是并没有用啊,就第一次会出现效果,用div写了几个下拉框,需要让他们互斥,除了用失去焦点还能怎么实现? 各位大神,有空的话请告知,谢谢

一个装饰器风格,依赖注入,OOP的Web框架

$
0
0

基于在上一家公司的开发经验,沉淀而来的web框架。

Kost 基于 Koa,使用 Typescript 编写,借鉴于 egg 的约定大于配置的思想以及 nest 的依赖注入和装饰器路由。

是一款内置多个功能,并遵循一系列规范的 Web 框架。

框架架构

kost

Q & A

Q: 为什么开发这样的框架

A: 框架基于以前的项目经验沉淀而来,首先是坚持 Typescript 不动摇,能在开发阶段避免了很多 bug。

Q: 为什么不使用 nest?

A: 因为它是基于 Express,而我以前的项目都是 Typescript + Koa

Q: 为什么不使用 egg?

A: egg 使用 JS 开发,目前对 Typescript 没有一个很好的方案(见识短,没发现),而且 egg 的 service 会丢失类型 IDE 提示,目前 egg 成员已在着手解决这个问题,期待中…

Q: 与两者的框架区别在哪里?

A: 借鉴了 egg 的约定大于配置的思想,约定了一些文件目录,文件名,如果不按照框架写,就会 boom。借鉴了 nest 的 OOP 编程思想,所有的,包括 Controller、Service、Middleware 都是类,都可以进行依赖注入,而且路由定义是装饰器风格,语法糖会让你更加的直观。对于开发而言,会有很好的 IDE 提示。

Q: 框架内置了一些特性,会不会平白增加性能负担?

A: 根据你是否开启特性,来决定是否引入包,所以不会有性能损耗。

Q: 是否需要配套 CLI 工具?

A: 目前没有,编译成 JS 就能运行,可以用 pm2 进行负载均衡。

Q: 框架是否包含进程管理?

A: 框架本身不进行进程管理,没有类似 egg 的 master 主进程管理子进程,没有 agent

何为开源

开源就是自己用的爽的东西,拿出来给大家用,然后发现你自己写的,用法和原理你肯定懂啊,但是别人不懂,你得写文档,维护文档的时间,不必写代码的时间少。

同时为了保证项目质量,你还得写测试用例,写测试用例的时间,也并不少。

要维护一个开源项目,真的是要花不少心思,向开源大牛致敬。

总结

实现起来没什么难度,前人栽树,后人乘凉,继承自Koa的类,然后在start之前,做一些初始化动作,加载Controller,验证Controller、Middleware、Service是否正确,加载配置文件等工作…

从创建仓库到现在100+个commit,而大多数commit都是更新文档,添加测试用例,最近也忙,断断续续的维护,今天终于完善了测试用例,覆盖率99%,终于可以发布第一个版本。

有兴趣的小伙伴,一起来维护吗,交个朋友

最后上项目地址: https://github.com/axetroy/kost

Viewing all 14821 articles
Browse latest View live