澳门太阳娱乐集团官网-太阳集团太阳娱乐登录

nodejs开首体验篇_node.js_脚本之家
分类:服务器

前言:写这篇文章的由来:

什么是nodejs?

目前需求中涉及到大量的异步操作,实际的页面越来越倾向于单页面应用。以后可以会使用backbone、angular、knockout等框架,但是关于异步编程的问题是首先需要面对的问题。随着node的兴起,异步编程成为一个非常热的话题。经过一段时间的学习和实践,对异步编程的一些细节进行总结。

1.前段时间单位有新项目启动,服务端要做的工作不多也不算麻烦,就是处理一些中间层的服务,而且我们团队里面个个都会JavaScript,领导就决定试试服务器端的JavaScript,结果本人有幸被派去研究了几天Node,怀着鸡冻的心情开始了node.js的篇章,这篇文章也就是为这几天研究的总结。

node.js是基于Chrome javaScript运行时建立的平台,用于方便地搭建响应速度快、易于扩展的网络应用。(但nodejs不是javascript应用,nodejs采用c++语言编写 )

1.异步编程的分类

2.一个JavaScript工程师如果没听过node.js那么我想你是不是错过了什么,每个优秀的前端工程师都有必要去了解后台处理流程,那么如果又能从JavaScript出发,岂不是一件很美妙的事么。

js是脚本语言,脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。对于需要独立运行的JS,nodejs就是一个解析器。

解决异步问题方法大致包括:直接回调、pub/sub模式、异步库控制库、promise、Generator等。1.1 回调函数

3.互联网的火热使得JavaScript风光无限,且服务端的JavaScript也并不是什么新技术了,相关的框架也有不少,只是node.js的成功让他爆发式的出现在我们的视线中,让很多前端工程师看到了从前端写到后端的另一种实现希望。注:node.js 是一个允许开发人员使用 JavaScript 语言编写服务器端代码的框架。

每一种解析器都是一个运行环境,可以干以下事情:

回调函数是常用的解决异步的方法,经常接触和使用到,易于理解,并且在库或函数中非常容易实现。这种也是大家接使用异步编程经常使用到的方法。

4.今年8月曾在某大公司最后一轮的面试被问到Node.js的问题,相对应的回答那是相当之糟糕,结果怎样你们懂的,感觉这个问题是导致没有通过的关键点之一...那家公司是我在读大学的时候就无比向往的公司,现在回想起那次经历和过程,谈不上惋惜,毕竟我真的尽力了

1.允许JS定义各种数据结构,进行运算;

但是回调函数的方式存在如下的问题:

  • 其实这篇文章更多的也是为了完成自己一个小小的心结...好吧,又扯远了。

2.允许JS使用运行环境提供的内置对象和方法。

  1. 可能形成万恶的嵌套金字塔,代码不易阅读;

  2. 只能对应一个回调函数,在很多场景中成为一个限制。

5.欢迎各种转载,不过请注明出处,谢谢。

例子:运行在浏览器中的JS用途是操作DOM,浏览器提供了document之类的内置对象。

1.2 pub/sub模式

澳门太阳娱乐集团官网,Node是个啥?

运行在nodejs中的JS用途是操作磁盘文件或搭建HTT服务器,nodejs相应的提供了fs、http等内置对象。

该模式也称为事件模式,是回调函数的事件化,在jQuery等类库中非常常见。

写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性的拿了些下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段。

nodejs特点:

事件发布订阅者模式本身并无同步与异步调用的问题,但是在node中,emit调用多半是伴随事件循环而异步触发的。该模式常用来解耦业务逻辑,事件发布者无须关注注册的回调函数,也不用关注回调函数的个数,数据通过消息的方式可以很灵活的传递。

1.Node 是一个服务器端 JavaScript 解释器,可是真的以为JavaScript不错的同学学习Node就能轻松拿下,那么你就错了,总结:水深不深我还不知道,不过确实不浅。

1.它是一个JavaScript运行环境

该模式的好处是:1. 便于理解;2. 不再局限于一个回调函数。

2.Node 的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处理数万条同时连接到一个物理机的连接代码。处理高并发和异步I/O是Node受到开发人员的关注的原因之一。

2.依赖于Chrome V8引擎进行代码解释

不好的地方时:1. 需要借助类库; 2.事件与回调函数的顺序很重要

3.Node 本身运行Google V8 JavaScript引擎,所以速度和性能非常好,看chrome就知道,而且Node对其封装的同时还改进了其处理二进制数据的能力。因此,Node不仅仅简单的使用了V8,还对其进行了优化,使其在各种环境下更加给力。(什么是V8 JavaScript 引擎?请“百度知道”)

//www.jb51.net/article/104455.htm

复制代码 代码如下:var img = document.querySelect;img.addEventListener { // 图片加载完成 ......});img.addEventListener { // 出问题了 ......});

4.第三方的扩展和模块在Node的使用中起到重要的作用。下面也会介绍下载npm,npm就是模块的管理工具,用它安装各种 Node 的软件包并发布自己为Node写的软件包 。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

上述代码存在两个问题:

安装Node

a. img实际已经加载完成,此时才绑定load回调函数,结果回调不会执行,但依然希望执行该对应回调函数。

在这简单说说在window7和linux两种环境下安装Node。安装的时候一定要注意Python的版本,多次因为Python版本的问题安装失败,建议2.6+的版本,低版本会出现Node安装错误,查询Python版本可在终端中输入:pyhton -v

复制代码 代码如下:var img = document.querySelect { ...}if { load();} else { img.addEventListener;}img.addEventListener { // 出问题了 ......});

1.先介绍linux下的安装吧,Node在Linux环境下的安装和使用都非常方便,建议在Linux下运行Node,^_^...我使用的是Ubuntu11.04

b. 无法很好处理存在异常

a.安装依赖包:50-100kb/s大概每个包一分钟就能下载安装完成

结论:事件机制最适合处理同一个对象上反复发生的事情,不需要考虑当绑定回调函数之前事件发生的情况。

sudo apt-get install g++ curl libssl-dev apache2-utils sudo apt-get install git-core

目前的异步库主要有Q、when.js、win.js、RSVP.js等。

b.在终端一步步运行一下命令:

这些库的特点是代码是线性的,可以从上到下完成书写,符合自然习惯。

git clone git://github.com/joyent/node.git cd node ./configure make sudo make install

不好的地方也是风格各异,不便于阅读,增加学习成本。

安装顺利的话到这一步Node就算安装成功了,2M的网络用了共计12分钟。

1.4 Promise

注:如果不用git下载也可以直接下载源码,不过这样下载安装需要注意Node版本问题。使用git下载安装是最方便的,所以推荐之。

Promise翻译成中文为承诺,个人理解是异步完成之后,就会给外部一个结果,并承诺结果不再发生改变。换句话就是Promise反应了一个操作的最终返回结果值(A promise represents the eventual value returned from the single completion of an operation)。目前Promise已经引入到ES6规范里面,Chrome、firefox等高级浏览器已经在内部实现了该原生方法,使用起来相当方便。

2.在Windows下使用Cygwin安装Node,这个方式不太推荐,因为真的需要较长时间和较好的人品。我的系统是 win7旗舰版

下面从如下几个方面来解析Promise的特点:

Cygwin是一个在windows平台上运行的unix模拟环境,下载地址:

包含三种状态:pending、fulfilled、rejected,三种状态只能发生两种转换(从pending--->fulfilled、pending—>rejected),并且状态的转换仅能发生一次。

下载好Cygwin后开始安装,步骤:

1.4.2 then方法

a.选择下载的来源 - Install from Internet

then方法用于指定异步事件完成之后的回调函数。

b.选择下载安装的根目录

这个方法可以说是Promise的灵魂方法,该方法让Promise充满了魔力。有如下几个具体表现:

c.选择下载文件所存放的目录

a) then方法返回Promise。这样就实现了多个异步操作的串行操作。

e.选择下载的网站 -

关于上图中黄圈1的对value的处理是Promise里面较为复杂的一个地方,value的处理分为两种情况:Promise对象、非Promise对象。

f.麻烦就麻烦在这步,考验人品的时候到了。需要的下载安装时间不确定,反正需要比较长的时间,偶尔会出现安装失败的情况。单击一下各个程序包前面的旋转箭头图标选择你想要的版本,选中时会出现了"x"号表示已经选中了该程序包。选择需要下载的程序包:

当value 不是Promise类型时,直接将value作为第二个Promise的resolve的参数值即可;当为Promise类型时,promise2的状态、参数完全由value决定,可以认为promsie2完全是value的傀儡,promise2仅仅是连接不同异步的桥梁。

Devel包:

复制代码 代码如下:Promise.prototype.then = function(onFulfilled, onRejected) { return new Promise(function { //此处的Promise标注为promise2 handle({ onFulfilled: onFulfilled, onRejected: onRejected, resolve: resolve, reject: reject }) });}function handle { var handleFn; if(state === 'fulfilled') { handleFn = deferred.onFulfilled; } else if { handleFn = deferred.onRejected; } var ret = handleFn; deferred.resolve; //注意,此时的resolve是promise2的resolve}function resolve { if(val && typeof val.then === 'function') { val.then; // if val为promise对象或类promise对象时,promise2的状态完全由val决定 return; } if { // callback为指定的回调函数 callback实现了多个不同异步库之间的转换。

gcc-g++: C++ compiler gcc-mingw-g++: Mingw32 support headers and libraries for GCC C++ gcc4-g++: G++ subpackage git: Fast Version Control System – core files make: The GNU version of the ‘make' utility openssl-devel: The OpenSSL development environment pkg-config: A utility used to retrieve information about installed libraries zlib-devel: The zlib compression/decompression library

在异步中存在一个叫thenable的对象,就是指具有then方法的对象,只要一个对象对象具有then方法,就可以对其进行转换,例如:

Editor包:vim: Vi IMproved – enhanced vi editor

复制代码 代码如下:var deferred = $; // !!deferred.then === truevar P = Promise.resolve;p.then

Python包:把Default切换成install状态即可

1.4.3 commonJS Promise/A规范

Web包:

目前关于Promise的规范存在Promise/A和Promise/A+规范,这说明关于Promise的实现是挺复杂的。

wget: Utility to retrieve files from the WWW via HTTP and FTP curl: Multi-protocol file transfer command-line tool

复制代码 代码如下:then(fulfilledHandler, rejectedHandler, progressHandler)

上个截图,以下载zlib-devel为例:

一个Promise里面的回调函数是共享value的,在结果处理中value作为参数传递给相应的回调函数,如果value是对象,那就要小心不要轻易修改value的值。

其上几步走完才算把环境搭建完成,可是现在还没有到安装Node,还需要在Cywgin的ASH模式下执行rebaseall,步骤如下:

复制代码 代码如下:var p = Promise.resolve;p.then { console.log('first callback: ' + val.x++);});p.then { console.log('second callback: ' + val.x)})// first callback: 1// second callback: 2

b. 进入cygwin安装目录下的bin子目录

1.5 Generator

c. 运行ash进入shell模式

上面所有的方法均是基于回调函数来完成异步操作的,无非是对回调函数进行封装而已。ES6里面提出了Generator,增加了解决异步操作的途径,不再依据回调函数来完成。

d. ./rebaseall -v

Generator最大的特点就是可以实现函数的暂停、重启,这个特性非常有利于解决异步操作。将Generator的暂停与promise的异常处理结合起来,可以比较优雅地解决异步编程问题。具体实现参考:Kyle Simpson

e. 没有错误就关闭命令行窗口

2. 异步编程存在的问题

好了,现在到下载安装Node了,启动Cygwin.exe后输入:

a) 异步事件包括两个环节:发出异步请求、结果处理,这两个环节通过event loop来连接起来。那么try catch来进行异常捕获的时候就需要分来捕获。

$ wget $ tar xf node-v0.4.12.tar.gz $ cd node-v0.4.12 $ ./configure $ make $ make install

复制代码 代码如下:try { asyncEvent; } catch { ......}

3.直接下载node.exe文件

上述代码是无法捕获callback里面的异常,只能获取发出请求环节的异常。这样就存在问题:假如请求的发出和请求的处理是两个人完成的,那么在异常处理的时候就存在问题?

nodejs.org下载较慢所以我在网盘上传了一个,下载地址:

b)promise实现异常的传递,这带来一些好处,在实际项目中保证代码不被阻塞。但是如果异步事件比较多的时候,不容易找出到底是那个异步事件产生了异常。

听说有不太稳定的问题,不过你假如只是想先在windows下了解Node,个人感觉这个方法比你装个Cygwin好很多。

复制代码 代码如下:// 场景描述: 在CRM里面展示价格的报警信息,其中包含竞对的信息。但是获取竞对的信息时间比较长,后端为了避免慢查询,就把一条记录拆成两块分别获取。// 第一步:获取价格报警信息,除了竞对信息function getPriceAlarmData() { return new Promise { Y.io(url, { method: 'get', data: params, on: function() { success: function { resolve; });}// 得到报警信息后,在去获取竞对信息getPriceAlarmData { // 数据渲染,除了竞对信息 render; return new Promise { Y.io(url, { method: 'get', data: {alarmList: data}, on: function() { success: function { resolve;}) // 获取完所有数据后进行竞对信息的渲染.then { // 渲染竞对信息 render { // 异常处理 console.log;

注:原本不太想写安装Node这段,可是为了这篇文章的全面性还是写了,没想到一写就是那么长一段了...茶几了

可以把上述代码转换成如下:

“Hello World” - 为什么每次见到这句心情都会小激动,不解...

复制代码 代码如下:try{ // 获取除竞对以外的报警信息 var alarmData = alarmDataExceptCompare; // 根据报警信息查询竞对信息 var compareData = getCompareInfo; render;} catche { console.log;}

首先,创建个hello.js的文件,在文件中copy如下代码:

在上述例子中把异常处理放到最后进行处理,这样当其中存在某个环节出现异常,我们无法准确知道到底是哪个事件产生的。

 var http = require; http.createServer { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end.listen; console.log('Server running at http://127.0.0.1:1337/');

2.2 jQuery.Deferred 的问题

代码逻辑:

jQuery中也实现了异步操作,但是在实现上不符合promise/A+规范,主要表现在以下几个方面:

a. 全局方法require()是用来导入模块的,一般直接把 require() 方法的返回值赋值给一个变量,在 JavaScript 代码中直接使用此变量即可 。require 就是加载系统预置的 http 模块

a. 参数的个数:标准的Promise只能接受一个参数,而jQuery中则可以传递多个参数

b. http.createServer 是模块的方法,目的就是创建并返回一个新的web server对象,并且给服务绑定一个回调,用以处理请求。

复制代码 代码如下:function asyncInJQuery() { var d = new $.Deferred(); setTimeout { d.resolve; return d.promise.then { console.log('output: ', val1, val2);});// output: 1 2

c. 通过 http.listen() 方法就可以让该 HTTP 服务器在特定端口监听。

b. 结果处理中异常的处理

d. console.log就不用多说了,了解firebug的都应该知道,Node实现了这个方法。

复制代码 代码如下:function asyncInPromise() { return new Promise { setTimeout { var jsonStr = '{"name": "mt}'; resolve; } asyncInPromise { var d = JSON.parse; console.log.then { console.log('show error: ' + err.message); });// show error: Unexpected end of inputfunction asyncInJQuery() { var d = new $.Deferred(); setTimeout { var jsonStr = '{"name": "mt}'; d.resolve; return d.promise.then { var d = JSON.parse; console.log.then { console.log;}, function{ console.log('show error: ' + err.message);});//Uncaught SyntaxError: Unexpected end of input

注: 想了解具体细节请查看文档 cnodejs.org/cman/all.html#http.createServer

从中可以看出,Promise对回调函数进行了结果处理,可以捕获回调函数执行过程中的异常,而jQuery.Deferred却不可以。

接着运行Node服务器,执行hello.js代码,成功启动会看见console.log()中的文本。有图有真相:

npm的下载和使用

除Node本身提供的API外,现在有不少第三方模块可极大的提高开发效率,npm就是Node的软件包管理器,可以用它安装所需软件包并发布自己为nodejs写的软件包。官网地址:npmjs.org

安装只需要在终端写入一行代码:

复制代码 代码如下:curl | sh

npm安装node扩展包同样是一行代码:

复制代码 代码如下:npm install

//例:npm install express

注:如果安装模块的过程中报域名错误的话,请清空缓存 >npm cache clean 或重启计算机即可。

理解Node的模块概念

在Node中,不同的功能组件被划分成不同的模块。应用可以根据自己的需要来选择使用合适的模块。每个模块都会暴露一些公共的方法或属性。模块的使用者直接使用这些方法或属性即可,对于内部的实现细节就可以不用了解。除了Node本身提供的API外,开发人员也可以利用这个机制来将应用拆分成多个模块,以提高代码的可复用性。

在Node中使用模块是非常方便的,在 JavaScript 代码中可以直接使用全局函数 require() 来加载一个模块。

在刚刚”Hello World"的例子中,require 可以加载系统预置的 http 模块;模块名称以 "./" 开始的,如 require 用来加载与当前 JavaScript 文件同一目录下的 myModule.js 模块。

2.自己如何开发模块?

刚刚介绍使用require()导入模块的时候,模块名称以 "./" 开始的这种,就是自己开发的模块文件。需要注意的就是JS文件的系统路径。

代码中封装了模块的内部处理逻辑,一个模块一般都会暴露一些公开的方法或属性给其他的人使用。模块的内部代码需要把这些方法或属性给暴露出来。

3.来一套简单的例子。先创建一个模块文件如myModule.js,就一行代码

console.log 然后创建一个test.js文件,导入这个JS文件,执行node看到结果

现在Node社区中已有不少第三方的模块,希望能有更多人通过学习Node,加入到这个大家庭中,为Node社区来添砖加瓦。先谢谢之,咱们继续。

4.来一个深点的例子。这个例子中将会针对 私有和共有 进行介绍。先创建一个myModule.js,代码如下:

var name = "Darren"; this.location = "Beijing"; this.showLog = function(){ console.log };

代码中出现了三种类型,分别是: 私用属性,共有属性和共有方法,再创建一个test.js,执行Node

结果高亮的地方很清楚的告诉我们,私有方法我们在模块以外是取不到的,所以是undefined。共有属性和共有方法的声明需要在前面加上 this 关键字。

Node能做什么和它的优势

Node核心思想: 1.非阻塞; 2.单线程; 3.事件驱动。

在目前的web应用中,客户端和服务器端之间有些交互可以认为是基于事件的,那么AJAX就是页面及时响应的关键。每次发送一个请求时,都会在网络里走一个来回。服务器必须针对这个请求作出响应,通常是开辟一个新的进程。那么越多用户访问这个页面,所发起的请求个数就会越来越多,就会出现内存溢出、逻辑交错带来的冲突、网络瘫痪、系统崩溃这些问题。

Node的目标是提供一种构建可伸缩的网络应用的方案,在hello world例子中,服务器可以同时处理很多客户端连接。

Node和操作系统有一种约定,如果创建了新的链接,操作系统就将通知Node,然后进入休眠。如果有人创建了新的链接,那么它执行一个回调,每一个链接只占用了非常小的堆栈开销。

举一个简单的异步调用的例子,把test.js和myMydule.js准备好了,^_^。把以下代码拷贝到test.js中并执行:

 var fs = require; fs.readFile('./myModule.js', function  throw err; console.log; console.log;

所谓的异步,大家应该都能想得到运行时会先打先显示"async",再显示"successfully"。

Node是无阻塞的,新请求到达服务器时,不需要为这个请求单独作什么事情。Node仅仅是在那里等待请求的发生,有请求就处理请求。

Node更擅长处理体积小的请求以及基于事件的I/O。

Node不仅仅是做一个Web服务的框架,它可以做更多,比如它可以做Socket服务,可以做比方说基于文件的,然后基于像一些比方说可以有子进程,然后内部的,它是一个很完整的事件机制,包括一些异步非注射的解决方案,而不仅仅局限在网络一层。同时它可能,即使作为一个Web服务来说,它也提供了更多可以深入这个服务内核、核心的一些功能,比方说Node使用的Http Agent,这块就是它可以更深入这个服务内核来去做一些功能。

Node事件流概念

因为Node 采用的是事件驱动的模式,其中的很多模块都会产生各种不同的事件,可由模块来添加事件处理方法,所有能够产生事件的对象都是事件模块中的 EventEmitter 类的实例。代码是全世界通用的语言,所以我们还是用代码说话:

var events = require; var emitter = new events.EventEmitter(); emitter.on("myEvent", function { console.log; emitter.emit("myEvent", "Hello World.");

简单的分析这段:

  1. 使用require()方法添加了events模块并把返回值赋给了一个变量

  2. new events.EventEmitter()这句创建了一个事件触发器,也就是所谓的事件模块中的 EventEmitter 类的实例

  3. on用来为某个事件 event 添加事件处理方法监听器

  4. emit(event, [arg1], [arg2], [...]) 方法用来产生事件。以提供的参数作为监听器函数的参数,顺序执行监听器列表中的每个监听器函数。

EventEmitter 类中的方法都与事件的产生和处理相关:

  1. addListener 和 on 这两个方法都是将一个监听器添加到指定事件的监听器数组的末尾

  2. once 这个方法为事件为添加一次性的监听器。该监听器在事件第一次触发时执行,过后将被移除

  3. removeListener 该方法用来将监听器从指定事件的监听器数组中移除出去

  4. emit(event, [arg1], [arg2], [...]) 刚刚提到过了。

在Node中,存在各式各样不同的数据流,Stream是一个由不同对象实现的抽象接口。例如请求HTTP服务器的request是一个流,类似于stdout;包括文件系统、HTTP 请求和响应、以及 TCP/UDP 连接等。流可以是可读的,可写的,或者既可读又可写。所有流都是EventEmitter的实例,因此可以产生各种不同的事件。

可读流主要会产生以下事件:

data 当读取到流中的数据时,此事件被触发end 当流中没有数据可读时,此事件被触发error 当读取数据出现错误时,此事件被触发close 当流被关闭时,,此事件被触发,可是并不是所有流都会触发这个事件。(例如,一个连接进入的HTTP request流就不会触发'close'事件。)

还有一种比较特殊的 fd 事件,当在流中接收到一个文件描述符时触发此事件。只有UNIX流支持这个功能,其他类型的流均不会触发此事件。

相关详细文档:

强大的File System 文件系统模块

Node 中的 fs 模块用来对本地文件系统进行操作。文件的I/O是由标准POSIX函数封装而成。需要使用require访问这个模块。所有的方法都提供了异步和同步两种方式。

fs 模块中提供的方法可以用来执行基本的文件操作,包括读、写、重命名、创建和删除目录以及获取文件元数据等。每个操作文件的方法都有同步和异步两个版本。

异步操作的版本都会使用一个回调方法作为最后一个参数。当操作完成的时候,该回调方法会被调用。而回调方法的第一个参数总是保留为操作时可能出现的异常。如果操作正确成功,则第一个参数的值是 null 或 undefined 。

同步操作的版本的方法名称则是在对应的异步方法之后加上一个 Sync 作为后缀。比如异步的 rename() 方法的同步版本是 renameSync() 。下面列出来了 fs 模块中的一些常用方法,都只介绍异步操作的版本。

test.js和myModule.js文件准备好了木?把下面这段代码copy到test.js中执行一次

 var fs = require; fs.unlink('./myModule.js', function  throw err; console.log('successfully deleted myModule.js'); });

如果没有报error,那么myModule.js就被删除了,就是这么简单

这只是一个简单的例子,感兴趣的话自己去多多尝试,实践出真理。由于篇幅原因就不多举例了。^_^

1.对于一个linux的命令和shell知识几乎为零的我来说,这段时间又学到了不少关于linux知识;vim真是一个强大的编辑器,不用鼠标的感觉真的很好;而且有一点对我来说很重要,在linux下编程很cool,尤其是在团队中都是使用windows的,装装更健康^_^。

2.理解了服务端JavaScript的一个成功框架-Node,以及它的一些优势和使用的方式,这篇文章就是最好的总结,当然,这只会是一个开始。

3.对于没有进入那么梦想的公司其实是有那么点遗憾,不过生活就应该要这样,有波折有起伏,这正是我需要并且期待的...那么新的生活还是要继续,做自己的舵手,把握好自己的方向,过去的就让它过去吧。

一些想对大伙说的话:

1. 在这我得打击一部分人的积极性。假如你对后台技术不够了解或者没接触过服务端语言,不知道I/O这些知识,没有后台处理流程这种概念,那么......Node并不是一门适合入门的服务端技术。为什么这么说:

a.重点就是中文实例少,文章少,想系统的学习会比较麻烦,所以在使用过程中总有一种不成熟的感觉,当然主要还是因为我对它不熟悉所造成的。国内使用Node的公司确实不多,当然国外还是有不少了,从cnodejs.org截了一个图:

b.对没有经验的朋友来说node其实并不好上手,从最简单“Hello

world”就可以看出来,不要以jQuery库为比较,所处理的事物不同,学习的成本也不同

所以不太建议作为新手入门的服务端技术,如果想学习一门服务端语言PHP和Python都是不错的选择,因为:书多 例子多 框架多 上手简单 容易理解 搭建方便...

c.以上都是我个人善意的建议,由于水平有限,请大家多多指教,希望嘴下留情。

2. 关于Node的书写规范和具体技巧本人就不献丑了,自己写Node的代码也不多,不过面向对象的编程思想在哪都是好使的。

以上内容是小编给大家介绍的nodejs初步体验篇,希望大家喜欢。

本文由澳门太阳娱乐集团官网发布于服务器,转载请注明出处:nodejs开首体验篇_node.js_脚本之家

上一篇:Nodejs的express使用教程_node.js_脚本之家 下一篇:没有了
猜你喜欢
热门排行
精彩图文