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

招聘PHP程序员

$
0
0

PHP开发工程师 薪资8000+

岗位职责

  1. 负责公司产品服务器端程序设计与开发
  2. 负责业务相关各类接口对接与实现
  3. 开发文档编写及整理

岗位要求

  1. 1年以上工作经验,熟悉php主流mvc框架,精通PHP OPP编程
  2. 良好的合作精神和团队协作能力,能适应高强度的工作
  3. 熟悉WEB前端技术,HTML5/CSS3/JavaScript/AJAX/JSON
  4. 熟练掌握mysql等数据库,有丰富的SQL优化经验,了解redis、mongodb、hbase等nosql优先
  5. 熟悉 Linux 操作系统,
  6. 有云平台(onApp或openstack)开发经验者优先

node用途都有那些?

$
0
0

现在node除了做中间层,真正纯node 后台多吗?

业余之作,mongoDB、Express、AngularJS、NodeJs 开源PT建站系统

$
0
0

年前,家里添了NAS,于是开始疯狂的下电影(PT),然后对PT系统产生了浓厚的兴趣,于是在今年的休息时间,使用MEAN(mongoDB, Express, AngularJS, NodeJS)开发一个PT(private tracker)系统,相当于前几年流行的NexusPHP一样的系统。

基本信息

项目地址:https://github.com/taobataoma/meanTorrent顶目演示:DEMO北美服务器,有点慢,请凉解 qq讨论组:291843550

主要实现功能

1, 纯Node实现的tracker 2,完备的种子上传、下载、管理、促销、推荐等功能 3,电影电视剧详情从TheMovieDB加载 4,评论、消息中心完全支持Markdown格式 5,邀请发放及邀请注册 6,多语言支持,目前只支持中文与英文 7,bit下载客户端黑名单过滤 8,功能基本完备的聊天室(socket.io),实现了用户列表,ban踢,汽泡式消息,文字字体及颜色等 9,更多功能介绍请移步github

待实现功能

1,论坛 2,vip捐赠通道 3,商务功能

个人总结

使用MEAN框架也很长时间了,现在流得的框架特别多,但个人认为,自已最熟悉的就是最好的,这样上手快,开发效率高。由于mean使用的是Mongo数据库,所以对于某些同学来说,可能不太习惯,如果你喜欢使用mysql, 那么请查看我的第二个开源项目,将mean里面的m换成sequelize了,你可以使用你熟悉的数据库,具体地址https://github.com/taobataoma/imean

如果您对我的项目感兴趣,可以加入进来,我们一起完善它,一起维护一个全新的PT系统,如果你有相关的技术问题,我们也可以一起讨论, QQ群:291843550

最重要的,如果觉得不错,请为我star,欢迎fork,谢谢! ;)

用GitHub Issue取代多说,是不是很厉害?

$
0
0

摘要:别了,多说,拥抱Gitment

2017年6月1日,多说正式下线,这多少让人感觉有些遗憾。在比较了多个博客评论系统,我最终选择了Gitment作为本站的博客评论系统:

  • UI简洁,适合我的博客风格
  • 使用GitHub账号登陆,适合技术博客
  • 使用GitHub Issues写评论,符合程序员的习惯

1. 注册OAuth Application

因为Gitment使用了GitHub的服务,因此需要注册OAuth application。其中,Authorization callback URL必须填写博客的域名(我填的是http://kiwenlau.com/)。注册成功之后将获取Client IDClient Secret,后面将会用到。

2. 加载Gitment的CSS与JS文件

下载gitment.cssgitment.js,分别放入主题目录的source/csssource/js目录中

layout/partial/head.ejs中添加

<!-- 加载gitment的css和js文件 -->
<link rel="stylesheet" href="/css/gitment.css"> 
<script src="/js/gitment.js"></script> 

3. 配置Gitment

添加layout/partial/gitment.ejs

<div id="gitment"></div>

<!-- 主页不要加载gitment -->
<% if (!index){ %>

<script>
var gitment = new Gitment({
  owner: 'kiwenlau',
  repo: 'blog',
  oauth: {
    client_id: '619731e02d908157a502',
    client_secret: '79d021512d492496a0729177b9acd807c579b1b6',
  },
})
gitment.render('gitment')
</script>
 
<% } %>
  • client_idclient_secret为第1步注册OAuth Application所获取的Client IDClient Secret
  • owner为你的GitHub账户名
  • repo为你保存评论的GitHub仓库名称,所有的评论将保存在该仓库的Issues

layout/partial/article.ejs中添加:

<%- partial('gitment') %>

4. 初始化Gitment

部署之后,就可以在博客页面的下方看到评论框。登陆GitHub账号之后,就可以对评论进行初始化,这样就可以开始写评论了。

每一篇博客的评论,对应于GitHub仓库一个issue。但是这些issue是不存在的,因此需要通过初始化Gitment去创建issue。这一点比较麻烦,因为对于每一篇博客都需要进行初始化。

实现细节可以参考我的博客源码blog,我们博客评论保存在这个仓库的Issues

参考链接

Gitment:使用 GitHub Issues 搭建评论系统

欢迎加入我们Fundebug全栈BUG监控交流群: 622902485

版权声明: 转载时请注明作者Fundebug以及本文地址: https://blog.fundebug.com/2017/06/16/how-to-use-gitment/

求推荐nodejs服务的日志流采集方案

$
0
0

求推荐nodejs服务的日志流采集方案

jquery 读取 .asp 文件的问题

$
0
0

.asp 文件 如下:<% response.write(“This is some text from an external ASP file.”) %>

html文件如下:<!DOCTYPE html> <html> <head> <script src=“Jscript/jquery-1.11.1.min.js”></script> <script> $(document).ready(function(){ $(“button”).click(function(){ $.get(“UserInfo.asp”,function(data,status){ alert(“数据:” + data + “\n状态:” + status); }); }); }); </script> </head> <body>

<button>向页面发送 HTTP GET 请求,然后获得返回的结果</button>

</body> </html>

为啥返回的结果,网页上显示如下

QQ图片20170622163413.png而不是这个样子:QQ图片20170622164004.png

程序做久了感觉什么东西都是传参数

$
0
0

就好像一颗树 从叶子传到枝干从枝干传到另一个枝干 你会发现最后产生的效果实际不是你来直接作用的 而是你给一个枝干传了个参数

关于Electron...

$
0
0

目的:应用直接使用而不用安装Nodejs环境 想请教下用electron-packager打包好的应用能否将nodejs环境集成进去? 或者其他的实现方法…


LodeStreams 开放远程开发职位( Web 全栈、iOS、Android 开发)酬劳合理、中英环境、优质队友

$
0
0

LodeStreams为大家带来一个充满诱惑的远程开发工作机会!

LodeStreams是一支总部位于西雅图的软件开发团队,面向美国和中国招收志同道合、有创业精神及远程工作精神的开发者、设计师加入。

在这里,你将参与到现在最流行的远程工作方式,你可以在任何地方完成你的工作,让你工作生活两不误。

此招聘信息是LodeStreams 开发团队统一招聘帖,一人可承担一项或多项职责,我们在找的人才方面有:

  • Android 开发
  • iOS 开发
  • Web 端开发( PHP、Node.js 等方向)

月薪: 9k-16k (RMB);只要你符合其中一条或多条,即可前来招呼!

––––

责任与义务:

  • 根据项目的要求与代码规范进行项目的开发、维护和文档编写;
  • 根据团队项目开发流程,参与项目整体分析并负责平台方面的分析、基于团队文档模板创建并维护相关技术文档;
  • 按照项目开发规划执行测试,确保软件质量;
  • 自己工作方面的开发∕管理工作,提供问题解决方案;
  • 参与团队工作事务,汇报进展,Scrum,周会等;
  • 远程工作,大本营西雅图–成都。

通用要求:

  • 熟练通过命令行及 UI 操作 git,理解 git 工作流;
  • 熟悉关系型数据库建模。熟悉非关系数据库去范式化设计方式加分;
  • 熟悉英文,阅读流畅。会讲比较流利的英语加分。
  • 有项目管理工具如 Trello (或 Tower、TeamBition 等)使用经验;
  • 经验: 1-3 年
  • 最低学历:本科及以上(专科同学英语 OK,价值观合得来的例外)

Web 端开发者能力要求(全栈):

  • 总体上有着很计强的开发者自我提高的心态,对开源社区充满兴趣,关注专业趋势,有一定的创业心态;
  • 专业方向进阶水平,有很强的解决问题的能力;
  • 有移动设备优先的 Responsive 设理念。有 React Native 经验者优先;
  • 熟练通过命令行及 UI 操作 git,理解 git flow ;
  • 热衷于遵循标准化、稳定的开发设计方式,同时又能打破传统,增添创意;
  • 熟悉英文,阅读流畅,会讲比较流利的英语加分;
  • 熟练操作*nix 系统( Linux 或 macOS )命令行;
  • 掌握编写测试的方式,熟悉 CI、CD 基本理念及流程。

Node.js 开发方向

  • 有 Node.js 开发进阶能力,对 React.js、Redux/Flux/Mobx 有着较深的了解,至少一年的使用经验(或有类似前端工程化框架同等经验);
  • 熟悉 RESTful 接口定义并能够编写符合规范的 RESTful 接口;
  • 对 JavaScript(ES2015, ES2017)有着较深的理解,对闭包、Promise 等常用机制了如指掌;
  • 对 PM2、Docker 有一定的了解,明白其优势及常用操作。

PHP 开发方向

  • 有 Wordpress 开发经验,会开发及自定义 theme,有 Magento 开发经验者优先;
  • 对 PHP 常用框架有一定了解,熟练使用一款 MVC 框架;
  • 熟悉 RESTful 接口定义并能够编写符合规范的 RESTful 接口;
  • 对 HTML5、CSS3、JavaScript(ES2015, ES2017)有着较深的了解,擅长写模块化的 JS、HTML、JavaScript 代码。

––––

为了提升沟通效率,除了在此处回复讨论外,了解职位职责、要求及需要应聘的朋友,请前往我们 LodeStreams官方网站:lodestreams.com的:「团队 – 加入 LODESTREAMS 大家庭」栏目选择对应的职位提交申请表单!提交后可加微信: cmFua3VuMjAzCg==深入探讨。

「关于你自己,你还有其他想让我们知道的吗?」这一部分可以多写一些,对于上面这每一条你的符合程度等等,你填了之后我们这边可以很方便地看到。一旦我们有空,一定好好看你的 application。

如果网站打开速度不是很快,请尝试开启 VPN / 隧道专用网软件并尝试重新加载。

此贴长期有效。谢谢

Let’s do something cool!

招聘Golang开发工程师两枚

$
0
0

职位诱惑: 中欧商学院创始团队,产品还没启动已经拿到天使轮 职位描述:

岗位职责: 1、 负责互联网产品的服务器后端开发; 2、 进行业务系统的需求分析、架构设计及开发 3、 独立编写开发相关文档。

任职要求: 1、计算机相关专业毕业; 2、至少1年以上Golang开发经验,熟练使用Golang进行Web,微服务应用开发; 3、熟悉除Go以外任意一种语言,懂nodejs,java或具有服务器开发经验优先; 4、熟悉Restful API、Redis、MySql、Git、Linux; 5、熟悉HTTP协议; 6、熟悉微服务架构,docker部署,风控,安全 加分 7、有支付相关开发经验者优先考虑 8、积极主动,有责任感、团队精神、良好的沟通能力。

公司: 上海汇萃信息技术有限公司 地点:上海广兰路 薪水: 15-25K 联系地址:david.yang@transferease.cn

前端开发一枚

$
0
0

前端开发

职位诱惑: 中欧商学院创始团队,产品还没启动已经拿到天使轮

岗位职责: 1.1年(含)以上相关工作经验。

2.期望共同学习,快速成长。

3.良好的责任心、学习和沟通能力,能积极面对压力。

4.熟练掌握HTML、CSS、JavaScript,es5。

5.熟练使用npm、webpack,nodejs等前端工具链。

6.有Rxact、Vue经验者优先。

7.有一定浏览器调优能力。 公司: 上海汇萃信息技术有限公司 地点:上海广兰路 薪水: 10-20K 联系地址:david.yang@transferease.cn

jsjsjsj

[广州 / 阿里 UC] [P6] 阿里移动-资深前端工程师

$
0
0

UC 招人啦,来了就是阿里人,和一堆大牛一起做牛逼的事情是一件很让人兴奋的事情!!

岗位描述 : 1、 参与项目、活动的前端开发,使用合理的设计方案 ; 2、根据产品需求与技术需求,对相关项目进行编码、迭代、维护、重构等工作。

岗位要求: 1、熟练掌握 JavaScript、CSS、HTML 语义化标签; 2、熟练掌握 jQuery/zepto 等常用辅助库 ; 3、熟练掌握 Gulp、Webpack、FIS3其中任意一项构建工具的配置与使用 ; 4、熟练掌握相关的前端调试技术,chrome developer tools、抓包等 ; 5、了解并实践过MV*类前端框架,如Vue/React等 ; 6、HTTP 协议及缓存,了解基本的浏览器渲染及网络传输过程 ; 7、关注业界动态及技术发展趋势,具备良好的学习能力; 8、具有Node.js相关开发经验的优先。

招聘部门:阿里移动事业群 - 国际业务部 - 短视频业务部 招聘地点:广州

有兴趣的同学请给我简历: dapixp@gmail.com

[北京][腾讯]招聘高级前端工程师

$
0
0

工作职责:负责腾讯新闻后台CMS系统的前端开发工作,为用户提供更好的用户体验和更稳定的系统;负责移动端web页面开发工作等。

职级: t2-t3

工作要求:

  • 正规大学全日制本科及以上学历。
  • 熟悉最新Web前端框架(React angular Vue),并精通其中至少一种。
  • 对web标准化有深入见解,良好的编码风格以及抽象思维。
  • 有移动端页面开发经验,或者熟悉nodejs。
  • 有开源项目者优先。

如有兴趣请发简历:ajiemath@gmail.com

mongoose 关联条件查询怎么写?

$
0
0

A表中ref了B表,B表有一个字段state 写一个查询体对象,找出所有B的state=2的A的信息 let query = {}; query = ????


已知图片地址怎么把图片保存在本地

[深圳]雷摩电子有限公司招聘 Node.js开发工程师 10k-20k

$
0
0

公司介绍深圳市雷摩电子有限公司是一家集成开发、生产、销售为一体的专业L E D 灯具生产厂家,主要从事L E D 投光灯、L E D 工矿灯、L E D 球泡、L E D 射灯、L E D 日光管等L E D 室内外照明的生产。我们正在物联网的风口上,公司研发的物联网系统已经应用到多个国外项目。 团队亮点年终分红.公司氛围好.智能硬件. 职位描述 -2年及以上node.js设计及开发经验;熟悉MEAN框架优先; -精通 JavaScript 语言,Node.js 标准库的使用,能完成相应的扩展开发; -精通 HTTP 协议,熟悉 MEAN 框架; -精通 JavaScript 异步模式编程并有深刻理解; -精通MongoDB数据库管理与开发; -熟悉 svn 代码管理 -熟悉 ES6 规范

薪资范围 10K~20K 薪酬主要看能力

工作地点深圳 宝安区 沙井街道 和一社区新联河工业园

联系方式请将简历发info@led321.com (简历注明来自cnodejs)

[上海] 设计家招聘全栈工程师 [15-30k]

$
0
0

职位关键词:互联网家装 ( www.shejijia.com) ,3D 云平台,云渲染,WebGL

岗位职责:负责基于 Web 的 3D 软件开发 有关技术方案、文档的编写,软件单元的测试。 根据项目具体要求,承担开发任务,按计划完成任务目标。 独立完成软件系统及模块的编码、调试。 协助测试人员完成软件系统及模块的测试。 理解用户业务,结合用户需求将业务转化为软件产品。

**任职要求: **

本科(含)以上学历,计算机或相关专业毕业。 有丰富的 Web 开发经验 良好的编程基础(数据结构,算法) 学习能力强,对新技术感兴趣 良好的沟通,团队合作,有互联网产品思维。 有前端开发( Javascript )和后端开发(Node, Java,Scala, Go)经验 如果你足够牛逼,可以忽略上面的任何要求,薪资可谈。

大大加分:

有图形学基础

我们的技术栈:前端: ES6+, React/Redux, three.js 后端: Scala, Node Ops: Jenkins, AWS, Docker,Splunk等

工作地址 : 陆家嘴软件园

简历投递: h.minghe AT gmail.com

node是否需要关闭数据库连接?

$
0
0
  • node 是单线程,那是不是数据的连接不需要频繁的打开和关闭,只要一个连接就行了?如果只是一个,那么性能瓶颈很快就会因为只能有一个连接而显现出来。
  • 如果是这样,那么就不能利用数据库的线程池了?
  • 性能上有什么影响?

Foxman, 基于微核架构的 Mock 解决方案

$
0
0

Foxman ⇗是一个使用 Node.js 开发的命令行工具,定位是一个可扩展的 Mock Server,帮助前端开发者轻松、独立、高效地完成前端开发和联调工作。

他不是一款静态文件响应工具, 假如你只需要一款轻量的 Node.js 开发服务器,推荐你使用 puer ⇗webpack-dev-server ⇗

github 地址: https://github.com/kaola-fed/foxman

背景

作为前端开发的我们,在实际的开发场景中会遇到以下问题:

  1. 环境:进行本地开发,需要起后端环境(Tomcat),对于新人来说,需要大量时间熟悉;熟练的人遇到某些确实存在的问题,也要花时间去解决,耗费大量前端开发的时间;
  2. 流程:前端开发先开发 html,再将 html 改写成指定的模板语法,影响开发效率;
  3. 接口:
    • 接口定义使用聊天工具发送,前端开发时不好理解接口字段,影响开发效率;
    • 接口变更需要重新编写文档,并重新发送,影响开发效率;
    • 文档散落,影响接口维护;
  4. 联调:
    • 联调过程很复杂,尤其是没有做热部署的Java工程,改视图还需要重启Tomcat,影响前端联调效率;
  5. 效益:
    • 前后端对接的方式,期望纯粹的 JSON 交换。不过现实情况,是依赖后端的模板引擎,导致前端理解接口存在一定的障碍;

以上问题的存在,才产生了 Foxman 这个项目。

影响

考拉前端使用情况来看,在接入 Foxman 后,拥有了更优雅的开发体验和更高的开发效率:

  1. 前端开发者不再需要在本地起 Tomcat 服务,新人也无需熟悉本地启动环境;而启动一个 Foxman 所需的时间,在 2s 以内;
  2. 接口定义,前端开发者更加有意识地去与后端定义接口,因为接口定义会落实到具体的 Mock 数据上;
  3. Mock 功能,使得前端开发者在开发阶段几乎可以是自治、无打扰的情况(产品不改需求的前提下);
  4. Living Reload 的功能, 页面开发过程中,修改 html 和 js 会通知浏览器 reload 页面;修改 css 会通知浏览器只 reload 样式,提升了开发体验,节省了人肉刷新耗费的时间。
  5. Processors 的功能, 即时编译的设定,更好地结合无 webpack 构建的场景;
  6. Proxy 功能,更优雅的联调方式。前端开发者,可以在本地调试模板和 javascript,避免了修改提交,再重新部署服务器的时间耗费。

核心概念

容器 - Foxman 核心提供了一个挂载插件的容器,并且提供方法供插件提供或调用的服务。实现上,使用了IoC(依赖查找)、插件化等架构设计的思想。

插件 - Foxman 所有具体的功能都使用插件实现。插件的作用是实现本身需求,并提供服务供其他插件使用。

服务 - 服务是架设于 容器 与 插件 之上的概念,容器 提供方法供 插件 注册或调用服务。

在这样的体系下,你可以轻松地编写 Foxman 的插件,并调用已有插件的服务。所以,完全不需要担心,Foxman 会不适合你的项目,因为你完全可以根据自己的需求来定制你所需要的Foxman。

安装

NPM

$ npm i -g foxman@lastest # 无梯子用户,推荐使用 cnpm

⚠️ Foxman 采用 es6 语法的大部分特性编写,要求使用 Node.js 版本不低于 v6.4.0

编写配置文件

module.exports = {
    port: 9000,
    secure: false,
    statics: [
        './src/'
    ],
    routes: [
        {
            method: 'GET',
            url: '/ajax/index.html',
            sync: false,
            filePath: 'foo.bar'
        }
    ],
    engineConfig: {},
    viewRoot: './views/',
    extension: 'ftl',
    syncData: './syncData/',
    asyncData: './ajax/',
    plugins: [],
    processors: [
        { match: '/src/css/*.css', pipeline: [], locate( reqUrl ) {} }
    ],
    proxy:  [
        { name: 'pre', host: 'm.kaola.com', ip: '1.1.1.1', protocol: 'http' }
    ]
}

这是一份基础的 Foxman 的配置文件,可以发现大部分字段都给 Server 用的,比如:

  • port - Server 监听的端口
  • secure - 是否启用 https
  • statics - 静态资源配置
  • routes - 路由列表
  • engineConfig - 模板引擎配置项
  • viewRoot - 模板根目录
  • extension - 模板扩展名
  • syncData - 同步数据根目录
  • asyncData - 异步数据根目录

以及一些特殊的字段,后面我们会重点介绍:

  • proxy - 联调阶段,同步数据与异步数据的转发至后端主机或测试服务器
  • processors - Runtime Compiler 的配置
  • plugins - 插件配置

更详细的 Foxman 配置,点击此处 ⇗

启动

在编写完 foxman.config 的目录下,执行命令即可启动 Foxman :

$ foxman

设计理念

插件体系

Foxman 的外置插件可以在配置文件中灵活载入:

...
plugins: [
        new RouteDisplay(),
        new MockControl({}),
        new Automount({}),
        new WebpackDevServer({}),
]     
...

而所有的内置功能,其实也是依托于插件展开。每个 Foxman 插件,需要实现一些方法,用于装载入 Foxman 容器时,做一些登记工作:

class Plugin {
    constructor() {
        // 初始化自身需要的属性
    }
    
    name() { // 定义插件的名字,如果没有该字段,会使用 constructor.name
        return 'name';
    }
    
    service() { // 提供给其他插件的服务
        return {
            foo() {
                return 'bar';
            }
        }
    }

    init({getter, service}) {
        const use = service('service.use'); 
    }
}

LivereloadPlugin ⇗

容器与依赖查找

容器的设定,离不开 IoC(控制反转)的概念。

实现 IoC,惯用的一种方案是依赖注入 (Dependency Injection) ,用于运行时被动地接收依赖的对象,早期的 Foxman 是根据 DI 的方式实现插件化的;

另一种方案是依赖查找 (Dependency Lookup) - 与 DI 相比更加主动,主动得调用框架提供的方法来获取依赖,获取时提供相关的配置文件路径 或 keypath 等信息。

Foxman 核心提供了 use 和 start 两个方法:

  • use - 注册 Plugin 及 service
  • start - 执行 Plugin 的 init 方法,传入 service/getter 方法,供其依赖查找
// core.js
class Core {
    use() {
        // 1. 注册 Plugin 进入容器;
        // 2. 在容器中登记 Plugin 提供的 service 
    } 

    start() {
        // 1. 循环 Plugin 执行 init 方法, 注入 getters, service 等方法,用于获取其他插件的配置或是服务
        // 2. 如果插件执行了 this.pending 方法,则等待异步操作完成。
    } 
}
// app.js
const core = new Core();

core.use(new Plugin({})); 
// 1. 执行 Plugin constructor
// 2. 注册 Plugin 进入容器
// 3. 在容器中登记 Plugin 提供的 service 

core.start(); 
// 执行 Plugin 的 init 方法,会在参数中注入的 getters 和 service 方法,用于插件依赖查找,

具体的实现细节,感兴趣的同学可以 查看源码 ⇗

功能模块

Server模块

基于 Node.js Server 框架 koa@1.x 构建,Server 的职责便是渲染模板、响应异步数据,以及在页面插入一些特定的脚本。

整个 Server 的启动分为三个阶段:

  1. 初始化 - 设置配置,设置路由,以及初始化 Koa 对象;
  2. 装载中间件 - 初始化中间件队列;
  3. 启动服务 - 启动 Server,并建立 websocket 服务器,用于与浏览器的通信。

在 Server 启动后,请求进入 Server 时,会经历中间件的处理,这个过程又能分为 3 个阶段:

  1. 请求分析,及确定响应方式,在请求的 context 上,生成 dispatcher 对象,用于在步骤 3 中确定以何种方式进行响应(同步 or 异步,模板路径 or mock 数据路径);
  2. 由插件装载的中间件对请求进行处理(取决于具体使用的插件),这个阶段可以对 dispatcher 对象进行修改,以完成插件所期望的渲染方式;
  3. 请求响应,根据请求的类型,分为以下几种方式
    • 同步请求 - 交给 Foxman-Engine 进行渲染,(注入一些 script 脚本,并且在页面上追加同步数据,使得浏览器 console 中输入 window.FOXMAN_SYNC_DATA即可获得 )
    • 异步请求 - 默认 json 方式展示,如需要 jsonp 响应,或是要自由控制响应方式,请使用插件 @foxman/plugin-mockcontrol ⇗
    • 文件夹请求 - 展示文件夹内的文件列表
    • 静态资源 - 响应静态资源

Server模块 提供其他插件一些关于 Server 相关的服务,可以供其他插件调用,比如:

  • injectScript - 允许其他插件在同步接口中插入 javascript 脚本
  • eval - 允许其他插件执行 js 代码
  • livereload - 允许其他插件通知浏览器 reload
  • use - 允许其他插件给 server 加入中间件
  • registerRouterNamespace - 允许其他插件新增路由,使用命名空间可以保证不同的插件的路由不会相互干扰

Foxman 的内置的 Mock Data 编写方式使用最原始的 JSON 字符串。
有特殊需求可以使用插件 @foxman/plugin-mockcontrol ⇗ 对响应进行额外控制,也可以在此基础上使用 MockJS,对响应数据进行控制。

Template 渲染引擎

模板解析模块,具有特定接口,完成模板渲染需求。

var engine = require('@foxman/engine-arttemplate');

...
engine: engine,
engineConfig: { // 取决于具体的模板引擎
    bail: true,
    compileDebug: true,
    imports: renderImports,
    debug: false,
    cache: false,
}
...

目前支持的模板引擎有:

假如没有你需要的,你也可以自行开发一款 Foxman 的模板引擎解析器,只需要实现一个特定的接口,基本结构如下。

const template = require('xxx-template');
class TemplateEngin {
    constructor(viewRoot, engineConfig) {
        // 初始化配置
    }
    
    parse(path, mockData) {
        // 返回一个 Promise,Promise 的返回是处理后的接口
        return Promise.resolve(template(path, mockData));
    }
}

具体实现,参考 @foxman/engine-arttemplate ⇗

Proxy

使用本地的模板,结合远程端的数据来拼装页面。

代理的原理:

  1. Foxman 接收到用户的代理需求时,将请求转发给后台服务器,并带上特殊的请求头(X-Special-Proxy-Header: foxman);
  2. 后端接收到 Foxman 的代理请求后,要求以 JSON 的方式将页面的同步数据返回;
  3. Foxman 接收到服务端的响应数据后,结合本地的模板来实现模板渲染的需求,并响应给用户。

代理的设定,使得我们可以在本地的环境下调试测试环境的场景,发现存在前端的 bug 也能轻松修复,不再需要重复的部署测试服务器。

来接触下 Foxman Proxy 的实际配置:

...
proxy:  [{ 
    name: 'pre', 
    host: 'm.kaola.com',  // 用于 nginx 转发到制定应用
    ip: '1.1.1.1',        // 目标的 IP 地址
    protocol: 'http'      // 协议
}]
...

完成上述配置后,使用者输入以下命令启动 Foxman,即可代理至远程服务器

$ foxman -P pre # pre 为 配置的 proxy name

Processors

Processors 是 Runtime Compiler 的设定,在接收到静态资源请求时,才去即时地编译前端资源(sass/less/mcss/autoprefixer),主要目的是兼容无 webpack 构建的开发场景。如已使用 webpack,则推荐使用插件 @foxman/plugin-webapck-dev-server

举例介绍 mcss 的即时编译配置

const Mcss = require('@foxman/processor-mcss');
const AutoPrefixer = require('@foxman/processor-autoprefixer');

...
processors: [
    {
        match: '/src/css/**.css', // 拦截该请求
        pipeline: [ // pipe 式的处理
            new Mcss({
                paths: []
            }),
            new AutoPrefixer({
                cascade: false,
                browsers: '> 5%'
            })
        ],
        locate(reqPath) { // 根据请求路径,定位到在系统中具体路径
            return path.join(__dirname + reqPath.replace(/css/g, 'mcss'));
        }
    }
],
...

假如没有你需要的,你也可以自行开发一款 Foxman 的 Processor ,只需要实现一个特定的接口,基本结构如下:

const mcss = require('mcss');

class Processor {
    constructor(options) {
        // 初始化解析器的参数
    }

    locate(reqPath) { // 根据请求路径找到文件在系统中的位置
        return reqPath.replace(/\.css$/g, '\.mcss');
    }

    *handler({ raw, filename }) {
        return yield new Promise((resolve, reject) => {
            // 在这里 进行 parse 操作,如 sass | less 的解析操作
            return {
                dependencies, content 
                // 该文件依赖,及内容
            }
        })
    }
}

具体实现,参考 @foxman/processor-mcss ⇗

关于贡献者

结尾

最后,如果你对 Foxman 的设计有那么点好感,或者是感兴趣,欢迎一起参与到开发当中。

感谢阅读!

Viewing all 14821 articles
Browse latest View live