我的node学习之旅:10天前开始学习Node,如今陷入迷茫,如何才能深刻的理解node 的精髓??
发布于 2年前 作者 ginchenorlee 1970 次浏览

10天前,开始学习NodeJs,10天后的今天陷入迷茫,于是不断的这个问题“如何才能深刻的理解node 的精髓??”就一直再我脑海徘徊,请各位给我指导指导(谢谢):

之前听很多人说Node 很神奇,但是一直有其他项目再做一直没有入手,以前的学习经历告诉我,一种语言就是一种思想,编程的时候尽量用这种语言的思想去写代码逻辑。于是10天前开始学习Node ,一至认为要好好的理解node 的思想精髓再何处,于是开启学习之路:

当然,刚开始先看入门资料,网上看了一些入门资料。当然国内的真的并不是很多,有的都是一些零散的,有些翻译也是不完整,权威的还是本社区最权威。 呵呵。最终还是学习 Node 入门 上面的。个人推荐可以先直接下个那个的完整demo (网上搜还有有的)看了,分析后再去看那个入门,毕竟用的是js 语言,代码还是很好懂的。它的代码逻辑块个人觉得还是很漂亮的,呵呵,你们认为呢?好吧,之后自己觉得好像有点感觉了,于是想做个网站demo练练手。 于是就再本社区看看前辈们是怎么学习的,几乎把很社区所有的帖子看了个遍, 很多有善的前辈,都有自己的学习写demo, 然后开源共享在github 上,真的很感谢他们这种无畏的精神,于是我就找了几个,比如:

  1. justfly 的http://www.imjustfly.net/ 在:http://cnodejs.org/topic/50326100f767cc9a519d51a6 博客中看见
  2. 本社区开源的 在github 上:https://github.com/cnodejs/nodeclub/#LNaN

3.lazynight的: http://lazynight.me/2009.html

4.snoopy 的博文http://cnodejs.org/topic/5007bd684764b72902c6aec9 中提到的:http://wujb.cnodejs.net/home

还有就是我选择下载的这个博客: 5.sumory 的http://cnodejs.org/topic/4f61ccc18a06477f520ab9e6博文中提到的:基于nodejs开发的社区系统-sumorio 该项目现在还没有体验地址, 但是博文中有截图,

主要为什么选择它,自己也不知道就选择了它,可能他是选的mysq数据库吧,好吧,就开始我代码之旅

在接下来的几天中把里面的代码全部看了一遍,边看遍学习,大概学习的知识点有: express Node的MVC框架; Async;bootstrap; coffeescript;ejs;jade;mongodb;node-markdown; validator;rrest.js… 然后就到了今天; 就出现问题了;我们先来看了一下一段代码,首先附一块代码块上: 做个范例:

   `enter code here` /**
 `enter code here`* 删除文章
 * 
 * [@param](/user/param) req
 * [@param](/user/param) res
 * [@param](/user/param) next
 */
exports.deleteArticle = function(req, res, next) {
    if (!req.session.user) {
        res.render('notify/notify', {
            error : '未登录用户不能删除文章'
        });
        return;
    }
  

      articleDao.deleteArticle(req.params.article_id, req.session.user.id, function(err, info) {
            if (err) {
                res.render('notify/notify', {
                    error : '删除文章出错,请检查您是否为该文章作者或者操作是否出错'
                });
                return;
            }
            articleCategoryDao.deleteCategoriesOfArticle(req.params.article_id, function(err, info) {
                if (err) {
                    res.render('notify/notify', {
                        error : '从文章分类中删除这篇文章出错'
                    });
                    return;
                }
            replyDao.deleteRepliesOfArticle(req.params.article_id, function(err, info) {
                if (err) {
                    res.render('notify/notify', {
                        error : '删除这篇文章的回复出错'
                    });
                    return;
                }
                res.render('notify/notify', {
                    success : '删除文章成功'
                });
                return;
            });
        });
    });
};

这个sumory博客中删除博客的那一个函数, 有没有感觉这个跟java 风格很相似,由于之前学习过java, 便陷入了烦恼之中: 我是不是把Node学习偏了方向? 把node 当java 用? 这个肯定不是node 的代码风格!! 于是自己又反省起来,想重新找学习node 的学习方法或者学习思路!!! 于是发布此文,忘各位予以纠正。

我想知道node 的 特点是什么。亮点是什么? 精髓是什么? 用怎么样的思路去编程才接近node的原始思想, 都是是单线程,好吧, 队友给我说叫我看node 源码, 看看这个单线程的消息队列是怎么实现的。 比如网上有说node 的响应很块,想做一个并发测试啊,或者压力测试等等,想看看node 处理异步的漂亮逻辑实现思路… 但是现在还没有的出答案…

希望各位给予指教,谢谢…

另外给大家分享几个这几天看过的不错的相关学习资料,以算回报大家: 呵呵: 采访Node.JS的创始人Ryan Dahl - node.js专业中文技术社区 - CNodeJS.ORGhttp://zoomquiet.org/res/scrapbook/ZqFLOSS/data/20110412235846/

Async详解:http://freewind.me/blog/20120518/932.html 里面有一二三,

还有就是本社区了。

我的博客链接: http://www.ginchenorlee.com/?p=260 微薄:http://weibo.com/ginchenorlee

19 回复

node的特点是异步IO,和轻量级吧。。。 跟java真心不一样啊。。。 我建议看一下大牛的使用 node.js 进行服务器端 JavaScript 编程这篇文章,简单几行代码就可以完成事,你用java想一想,其中差距你自然明白了。 我以前也是做java的,后来看过这篇文章真心被node震撼啊! 一说起node总比较性能,但是编码的效率才是我喜欢它的理由,而且一般来说性能怎么也中等偏上,算是性价比很高吧。

做个很贴合实际的比喻吧,nodejs就是用国产车的钱买了辆中高档车。语法简单,性能出色,但是由于还很年轻,还没被大众认可,就像国产车那样。

哈啊,怎么像java了?你是说Dao的名称?

恩,去仔细的看一下,谢谢推荐,

恩,这个比喻巴适,呵呵

呵呵, 个人感觉哈,因为之前一直学java, 现在总是不自觉的和它的一些风格做比较,这个是个坏毛病,思维被java 给凝固了,整个博客里的代码逻辑很漂亮额。不愧是高手啊。

@Ginchenorlee 见笑了,高毛线啊,哈哈。我也是java的。sumorio是从1月份开始学node过程中写的,之前连js都不懂。

我以前也是做java的,谈谈我对node的一点点小的见解吧。 js是一种弱语法,因此灵活,而学过oop开发思路的人,在操作js的时候,就有N多的不习惯,我以前同事就很不喜欢js,但迫于国内开发人员必须从前台到后台都贯通,只能硬着头皮凑着用。js的灵活是因为他是弱语法,而且以函数function为中心,因此很容易上手。而业内,有很多高手,将js进行了封装,使得他看似面向对象,这所谓的封装,就是按照一种规范或者约定来去编码,因此格式看上去就很oop了,但仍然逃脱不了js的函数中心理论。dojo、jq、ext-core就是按照自己的编码方式,架构出一套js的框架提供给别人使用,目的就是方便,实用性强。你提供的代码确实很像java的编程风格,那是因为你看见有dao的存在,这只是名字,而CRUD的具体操作你仔细看看,就会发现跟java的不同,这里的代码是异步的。如果你设计框架,你也能模仿其他语言,或者按照自己的操作喜好来设计,也许你的框架发布之后,有人会说,这个像php,这像c#,这像… 一定要适应他的编程风格,这是nodejs倡导的,也是他的优势,千万不能被之前学过的语言先入为主,要变通。以上个人胡言乱语,仅供个人参考。

的确,之前写了一个框架就是按照自己的思维PHP的想法来写。话说LZ说的没有理解node的精髓,个人感觉也没有理解清楚!当时强加一个MVC模型给node,发现的确不怎么可靠!

确实,个人也这么觉得

dao也好,mvc也好,这种分层跟node本身没太大关系,名字神马的更无所谓了,这种模型最主要是易于更新、维护、分工协作罢 就我个人使用node coding的感觉,就跟js的弱类型特性一样,就是没有限制~ 随意发挥~ 只要你觉得便于理解/维护就行,我觉得这也是node的精髓之一,没有条条框框,你可以形成自己的风格; 要说亮点的话,最简单的一个例子,天生异步,你可以并行取N多数据(有上下文逻辑的不说),时间复杂度只取决于耗时最长那个,如果利用不到这个特性,还顺序取数,那用node就是换种语言罢了~

恩。,分析得很好,js 本身就是一门很好的函数式语言,这就是它的特点,以函数为中心,采用一些闭包的思想。 谢谢分析呀, 以后设计代码风格或逻辑多靠近这个。

哈哈,你这个观点 非常赞同。谢谢分享啊

@Ginchenorlee 灵活运用,你甚至可以把js往其他风格语言上写都行,大神级别的。。。。

时间复杂度只取决于耗时最长那个 赞同。。

哈哈,有空再看下这本《CoffeeScript程序设计》然后你就会发现java真是复杂了…

我理解的node是一个平台,就像java的虚拟机那样,它的异步IO、单线程消息机制非常出色地处理了高并发,其实还有用c、c++语言编写并用c++去开发的“node模式”的平台,对于语言,为什么面向对象编程语言更流行呢,个人觉得面向对象的语言更符合人类的思维,人们人为地抽象了所谓的类,但是面向函数语言符合这个真实的世界。

回到顶部