Coder Social home page Coder Social logo

wechat-dev-with-nodejs's Introduction

StuQ《Node.js微信开发》

课程概览

我们这次讲的课是《Node.js微信开发》,是StuQ推出的第一门课,期望做成一门可以打样的课。

Why

随着移动互联网的发展,app开发技术也逐渐从native到hybrid,当微信横空出世之后,拥有大量用户,很多公司为了能够借力,集成微信作登录为用户授权管理,当微信推出公众号后,h5技术就得到了大量应用,h5和web开发都是要使用js作为主要语言,无论是dom操作,动画,还是ajax异步网络请求等,故而js是必须会的。

如果能够用js可以搞定h5端,还能搞定服务器端的微信开发,是不是更好呢?基于这个初衷,我们特地准备《Node.js微信开发》一课,Node.js是目前最火的技术,微信开发也是,而微信开发主要是以h5和js为主,以js为纽带,链接Node和h5端开发,既能完成应用开发,又能让大家在技术上有一定指导意义,为日后的全栈选择提供了可能。

作者简介

桑世龙(网名i5ting),StuQ 明星讲师,开源项目 Moajs 作者,Node.js 技术布道者

曾就职在新浪、网秦,曾做过前端、后端、数据分析、移动端负责人、做过首席架构师、技术总监,全栈技术实践者,目前主要关注技术架构和团队梯队建设方向。

githubcnodejs上的i5ting,目前在天津创业,空弦科技cto,公司目前使用技术主要是Node.js,Moajs作者, 技术栈算所谓的MEAN(mongodb + express + angular + node),所有代码都部署在阿里云上

曾在新浪,网秦等工作过

算全栈程序员吧,java、php、perl、ruby,bi、云计算、ios、android、h5都做过,带过前端、后端、数据分析、移动端负责人、做过首席架构师、技术总监、CTO

哈哈

我的名字i5ting,原因是我媳妇叫张婷,哈哈

闲言少叙,下面开始正题

Node.js靠谱么?

我可以很负责的讲,Node.js可以完成任何java、php等后端语言可以做的事儿,唯一的差别的是它们发展的时间比较长,在很多模块、开源项目或库等方面有先手优势。

但单就web开发后端来说,Node.js是没有任何问题的,

  1. 稳定,支持cluster集群
  2. 开发速度非常快,代码复杂度较低
  3. 支持mysql、postgre等主流关系型数据库,支持mongodb、redis等NoSQL数据库。无论是严格事务性,还是非严格事务性,都可以轻松应对。
  4. 一切皆模块,对抽象,复用等都非常简单
  5. 对微服务、SOA等架构支持非常好,有足够的扩展性,可以放心与其他服务集成

课程目录

本课程共6节,核心内容如下

  1. 第1节:基本技能
  2. 第2节:Nodejs入门 (14/14)
  3. 第3节:异步流程控制
  4. 第4节:Express和微信开发入门 (6/6)
  5. 第5节:Mongodb数据库
  6. 第6节:微信实例和h5实践 (4/4)
  7. 第7节:WeUI实战 (7/7)
  8. 第8节:微信支付
  9. 第9节:实战付费课程系统

为了能够让大家有更好的理解,赠送了基础技能:Linux、Git、终端、编辑器。

主要内容

  1. Node.js基础和Express框架使用
  2. 微信开发入门与实例
  • 微信分享:对于展示页,利用微信平台来实现病毒式传播
  • 微信授权:集成微信用户授权,可以轻松获得大量用户
  • 微信支付:对于支付类的,可以通过快速实现
  1. H5和WeUI前端实践
  2. 项目实战,实现微信端的付费课程系统

我们花了很多精力把基础知识和单一技能点

  • 基本技能(Coding IDE,Git,命令行等)
  • nodejs基础
  • express
  • 微信基础(后台)
  • 微信分享
  • h5和weui实践
  • 微信支付

这些都太零散了,为了能够让大家有一个整体的项目认知,这里面我们再加一个项目实践,《rework》一书里讲,抓自己的痒,是说创业的时候选题,从自身的痛点出发,这样更容易成功。那么,我们(StuQ)的这个课程,如果想要推广,想让更多人参与,怎么办呢?

既然讲的是这课,那我们就写一个吧!

如何学习?

  • 循序渐进,一次只学一样不会的
  • practice makes perfect,熟能生巧,一定要结合例子,多练,多思考
  • 玩出乐趣,以一个更好的心态来面对编程,切勿急躁、抱怨
  • 一万个小时就会成为专家,坚持就是胜利,至少目前软件开发是朝阳产业。

为什么前端越来越难?越来越有意思?

大前端

从架构上讲,软件从c/s到b/s过度,它的桥梁是浏览器,尤其是ajax促进了web2.0的成功,所以现在我们看到的绝大部分软件的架构都是b/s的,也称为瘦客户端。

从prototype.js到yui,到jquery,到extjs等他们只是从用法和ui上演进,还有就是underscore等工具库。

而backbone的出现,把mvc引入前端,于是前端开始了分层。

当angular.js横空出世,又引入了双向绑定,ioc依赖注入,指令等概念,这实际上在java里早有的概念,这又再一次增加了前端的复杂度。

上面说的是架构上得演进,还有一些enhance的提高,比如js方面有coffeescript和typescript,css方面有less/sass/scss/stylus等,这些不是什么新概念,是对web开发的增强。前提是你熟练使用js和css才能用。

最后是MEAN的full stack最新趋势。有望替换LAMP.

这些还只是前端的发展,现在是移动互联网时代,在微信淘宝等带领下,h5正如火如荼的袭来,可以说是当下最火的技术。那么移动端h5开发和上面的前端技术如何结合就成了现下得趋势。

我觉得大前端应该现下web的统称,包含web开发最佳实践,趋势以及h5。 nodejs作为一个兼容js语法的平台,更容易让广大前端开发者接受,在构建,工具等领域辅助大前端的成长。

如何学习

我们来想想一般的前端有什么技能?

  • html
  • css(兼容浏览器)
  • js会点(可能更多的是会点jquery)
  • ps切图
  • firebug和chrome debuger会的人都不太多
  • 用过几个框架,大部分人是仅仅会用
  • 英语一般
  • svn/git会一点

那么他们如果想在前端领域做的更深有哪些难点呢?

  • 基础:oo,dp,命令,shell,构建等
  • 编程**上的理解(mvc、ioc,规约等)
  • 区分概念
  • 外围验收,如h5和hybird等
  • 追赶趋势,如何学习新东西

以上皆是痛点。

现在来总结一下学习有2种,1是从头来,2是从某一种框架起

第一种学习下来,没个几年很难学通,第二种只会用框架,补齐概念和基础也比较费劲。总之,无论如何学习曲线都是比较陡峭的,那么如何来让入门的开发者快速学习到这些呢?

软件的精髓在应变,殊途同归,学会如何学习才是我们最重要的道。

  • 积极的心态,做好适应变化的准备
  • 找到属于自己的学习方式
  • 如果有机会,改变或创新,贡献开源社区

非StuQ会员,请加入群聊

Connect

wechat-dev-with-nodejs's People

Contributors

byr-gdp avatar i5ting avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wechat-dev-with-nodejs's Issues

TODO

  • 数据库
    • sequelize
    • mongoose
  • 实用模块

一道promise 的题,求解

之前看到的一道题,现在还不知道答案,求解

What’s the difference between promises below.

doSomething().then(function () {
  return doSomethingElse();
});
doSomething().then(function () {
  doSomethingElse();
});
doSomething().then(doSomethingElse());
doSomething().then(doSomethingElse);

我认为比较重要的内容,包括微观和宏观两方面

微观:

  • 各类模块的使用:mongoose/redis/superagent/日志记录例如log4js,如何使用ES6 promise的方式使用redis
  • ES6 Promise和bluebird Promise的区别

宏观:

  • 如何实现http api:真正开发过程中如何命名路径、如何有效分层
  • 开发之前如何有效划分层级、如何有效定义函数之间的接口,最好以真实案例讲解
  • 错误处理的流程,如何使用try catch finally,发生错误以后子函数如何返回给父函数,放在具体案例中讲解

关于项目变更

中途将一个PHP项目换成nodejs项目可以预见的难点有什么?有没相应的解决方法。谢谢

关于使用REST APIs 框架

现在移动端APP都是调用后端api。而后端使用Express ,koa 等重头开发api的话,自己要写view,dao,server等很多层。是否直接使用LoopBack这样的REST APIs 框架比较方便快捷?

联系nodejs

能否使用阿里的虚拟云主机联系测试nodejs有关知识点,
虚拟主机怎么配置安装相关软件或环境。
image

响应式还是拆?

1,目前是两套(pc and mobile),但是修改的时候要分别去维护。所以想着要不要做成响应式的网站。问题是响应式网站会更好维护嘛?在访问速度上会不会比之前的慢?
2,目前移动端用的是sui,pc用jq。我想着需不需要用vue,react这类热门的框架。对了。前后端没有分离。

请教关于require的路径问题

老师您好,我发现使用require时,文件如果嵌套得太深的话,路径就会变得不美观和不实用。如果我有多个文件require同一个js,当这个js路径发生变化时,得更改许多文件,这里有没方法缓存起根目录或者其他方式使得这个路径便于维护。对于前端来说,是否可以用gulp来代替这种文件路径的定义。谢谢。
image

http.request() 过多造成OOM,加入rabbitmq

上次答疑说过:

    for(i <- [1, 100w]) {
        var req = http.request(options, callback);
        req.end();
    }

可以加入rabbitmq,这两天我也看了下这个东西,主要集中在Work Queues,我的想法是生成一定数量的http.ClientRequest 实例,然后将它们sendToQueue。

  1. 我看了一下例子,基本上传输的message都是String类型的,能支持对象么,我能传输一个req么?
  2. sendToQueue的时候,好像也没有参数可以指定多少条进入到queue中去?
  3. 上面req的这段代码中,callback是要处理response,假如这边我要怎么处理callback函数,简单滴说,callback函数的定义应该在sendToQueue这边么?而不是consume这边?👮🏻

单元化测试

想了解一下单元化测试,如果可以的话希望能传授一下这方面的知识。

vsc 不能调试的问题

最近维护的一个express项目,用了大量的 let 来声明变量,开始用 node v.5.2.0 ,来跑的这个项目的时候,报错:SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
换成 node v6.2.0 ,项目就正常跑起了,
然而用vsc 调试的时候,环境选择Node.js 时候,也报以上的错误,
然后启动调试的时候,环境选择node 6.3 experiment ,结果报这个错误:
node --inspect=5728 --debug-brk --nolazy app.js
node: bad option: --inspect=5728 ,
现在vsc 调试跑不起来,该如何设置呢,

关于passport使用的一点疑惑

首先看一点代码:

app.post('/login',
  passport.authenticate('local',
    { successRedirect: '/',
     failureRedirect: '/login',
     failureFlash: true }),
  function(req, res) {
    // 验证成功则调用此回调函数
    res.redirect('/users/' + req.user.username);
  });

第三个回调函数有没有必要呢,因为上面的参数的意思是:
验证成功跳转到 “/”;
验证失败跳转到 “/login”;
所以不论成功或失败都不会有回调执行;
当然去掉其中一个条件,当满足去掉的条件时就会执行第三个参数 好像有点明白了;

第二个疑问 看代码:

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});

这个就用有点晕了,对于这段代码的解释,网上有段说法如下:

authenticate()方法有3个参数,
第一是name,即验证策略的名称,
第二个是options,包括下列属性:
session:Boolean。设置是否需要session,默认为true
successRedirect:String。设置当验证成功时的跳转链接
failureRedirect:String。设置当验证失败时的跳转链接
failureFlash:Boolean or String。设置为Boolean时,express-flash将调用use()里设置的message。设置为String时将直接调用这里的信息。
successFlash:Boolean or String。使用方法同上。
第三个参数是callback。 注意如果使用了callback,那么验证之后建立session和发出响应都应该由这个callback来做,passport中间件之后不应该再有其他中间件或callback

咦 !!!我好像明白了 但passport这个立即执行的方法,还真是让人看着不舒服呢;看来写wiki也能解惑啊

以上片段节选自 passport教程

一个关于百度BAE微信支付的实例

wiki链接:http://git.oschina.net/hycx/GymnasiumWeChat/wikis/%E5%85%B3%E4%BA%8E%E6%94%AF%E4%BB%98-%E4%B8%80%E4%B8%AABAE%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E7%9A%84%E6%A1%88%E4%BE%8B

由于github对图片的支持不是很好所以将问题写在了码云的wiki上,万望谅解啊
这个流程是怎么是新的;
1、PC端点击确认支付;
2、生成二维码:
以上两步都是PC端实现;
线面是手机端操作:
1、手机微信扫描二维码
2、点击立即支付-->确认支付-->输入密码;
3、显示支付成功页面
以上是移动端完成支付;
而后PC端页面跳转刷新

移动端支付完成PC端怎么会刷新呢;

你看啊,手机端支付完成,微信服务器向我的服务器发送请求告知支付完成,我的服务器接受到请求后得知支付完成, 但是PC端前端页面怎么会刷新呢,服务端会向PC端主动推送信息吗,感觉是这样,但不知道如何实现啊;
桑老师有这方面的经验吗;能不能给个解决方案,利用wechat-pay这个库解决,万分感谢;

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.