加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 Node.js开发指南_中文正版

Node.js开发指南_中文正版.pdf

Node.js开发指南_中文正版

锅锅
2012-10-31 0人阅读 举报 0 0 暂无简介

简介:本文档为《Node.js开发指南_中文正版pdf》,可适用于IT/计算机领域

内容提要本书首先简要介绍Nodejs然后通过各种示例讲解Nodejs的基本特性再用案例式教学的方式讲述如何用Nodejs进行Web开发接着探讨一些Nodejs进阶话题最后展示如何将一个Nodejs应用部署到生产环境中。本书面向对Nodejs感兴趣但没有基础的读者也可供已了解Nodejs并对Web前端后端开发有一定经验同时想尝试新技术的开发者参考。图灵原创Nodejs开发指南定价:元读者服务热线:()转 印装质量热线:()反盗版热线:()著    BYVoid责任编辑 王军花执行编辑 丁晓昀人民邮电出版社出版发行  北京市崇文区夕照寺街号邮编   电子邮件 ptpresscomcn网址 http:wwwptpresscomcn北京      印刷开本:× 印张:字数:千字年月第版印数:册年月北京第次印刷ISBN◆◆◆前言前言这本书讲了什么本书是一本Nodejs的入门教程写给想了解Nodejs的开发人员。我的目标是使读者通过阅读本书学会使用Nodejs进行Web后端开发同时能熟悉事件驱动的异步式编程风格以便进一步了解Nodejs的许多高级特性以及它所应用的更多领域。本书共章分别讨论了Nodejs的背景、安装和配置方法、基本特性、核心模块以及一些进阶话题。除此之外还有个附录分别介绍了JavaScript的高级特性和Nodejs编程规范。下面简要概述各章的主要内容。第章“Nodejs简介”这一章概述了什么是Nodejs。读过这章后你将对Nodejs有一个基本的认识同时了解它与JavaScript的深厚渊源。第章“安装和配置Nodejs”这一章讲述了如何在各种不同的环境下安装和配置Nodejs及其基本运行环境同时你你可以了解到如何编译Nodejs以及多版本管理工具。第章“Nodejs快速入门”这一章讲解Nodejs的基础知识你将会学到如何使用Nodejs的基本环境和工具进行开发、运行和调试。同时还会讲解异步式IO与事件式编程的一些重要概念这些概念将会贯穿全书。此外这一章还详细介绍了Nodejs的模块和包的系统这些都是开发中经常会碰到的内容。第章“Nodejs核心模块”这一章以全局对象、基本工具、事件发射器、文件系统和HTTP为代表介绍了Nodejs前言最常用的核心模块。你将会在后面的章节及以后的开发中经常与这些模块打交道。第章“使用Nodejs进行Web开发”这一章是本书的实践性章节一步一步教你如何从零开始用Express框架创建一个网站实现路由控制、模板解析、会话管理、数据库访问等功能最终创建一个Web微博网站。第章“Nodejs进阶话题”这一章涉及几个进阶话题包括模块加载机制、控制流分析和优化、生产环境的应用部署等内容最后还讨论了Nodejs适用的范围帮助读者在今后的开发中作出更好的取舍。附录A“JavaScript的高级特性”这个附录介绍了JavaScript的一些高级特性如函数作用域、闭包和对象的操作等内容。这些特性在浏览器端的JavaScript开发中并没有受到应有的重视而在Nodejs中却十分常见阅读这个附录可以帮助你更好地理解并运用JavaScript进行复杂的网站开发。附录B“Nodejs编程规范”这个附录介绍了Nodejs代码风格的一些约定遵守这些约定可以让你的代码更清晰、易懂同时也有利于接口开发的统一。该附录还分享了一些开发经验可以让程序避免很多意外错误和性能损失。谁应该阅读本书本书的目标读者是想要学习Nodejs但没有任何系统的经验的开发者。如果你听说过Nodejs并被它许多神奇的特性吸引那么这本书就是为你准备的。通过阅读本书你可以对Nodejs有全面的认识学会如何用Nodejs编程了解事件驱动、异步式IO的编程模式同时还可以掌握一些使用JavaScript进行函数式编程的方法。本书假设读者已经学过至少一门编程语言对基本的程序设计语言概念(如变量、函数、递归、对象)有所了解。如果你是首次学习编程语言我建议你先学一门常见的且容易入门的语言如Java或C。如何阅读本书熟悉浏览器端JavaScript的读者将很容易学会Nodejs的许多特性包括事件式编程、闭包、回调函数等因为这些特性已经在浏览器中被广泛应用。同时你还可以学到Nodejs前言在Web开发中的服务器端与浏览器端的结合方式这无论是对前端设计还是后端开发都是有利的。你还会对JavaScript有一个全新的认识因为服务端的JavaScript中没有DOM和BOM也不存在浏览器之间的兼容性问题。不熟悉JavaScript但是了解C、Java、C、C#的读者将很容易学会JavaScript的语言特性及Nodejs的基本机制如模块和包。你需要关注的仅仅是JavaScript语言的特别之处以及服务器端开发中需要注意的一些要点。已经非常了解Web后端开发(如PHP、ASPnet、RubyonRails、Django等)的读者本书将通过Nodejs给你一个不同的视野。你会发现Nodejs和这些传统的框架有很大的区别因为它使用了事件式编程和异步IO所以你需要改变一些已有的思维方式。同时你还能享受到Web前后端紧密配合带来的新鲜感并可能对Ajax有全新的认识。如果是完全没有接触过JavaScript的读者那么我建议你看完本书的前两章以后花点时间到http:wwwwschoolcomcnjs网站看看JavaScript的入门教程。你只要了解基础知识就行了本书并不要求你学成一个JavaScript专家。在这之后请阅读本书的附录A了解一下实际开发中可能会遇到的稍微复杂的语言特性。附录A是为本书量身定做的你可以从中很快地学会Nodejs经常使用到的那些特性。如果你想更加深入系统地学习JavaScript推荐阅读MozillaJavaScript指南http:developermozillaorgenJavaScriptGuide。本书从第章开始将介绍如何用Nodejs开发你应该仔细阅读这一章。第章是一些最基本的模块介绍涉及Nodejs模块的基本风格这可能会帮助你理解后面介绍的API。第章是一个真枪实弹的实战演练跟随这一章的每个步骤你就可以用Nodejs实现一个真正的Web应用体验开发的成就感。第章则是一些进阶话题你会在这里接触到Nodejs的一些深层次概念同时你还将学会如何真正部署Nodejs应用。本书的每一章最后都有一个参考资料小节里面有很多有价值的资料如果感兴趣不妨继续深入阅读。在阅读本书的过程中我建议你抽时间看看附录B在这里你会了解到Nodejs开发的一些编程规范写出符合社区风格的漂亮程序。如何学习Nodejs通读本书你将会学到Nodejs的很多东西但如果想完全掌握它我建议你亲自尝试运行本书中的每一段代码。本书的所有代码可以在http:wwwbyvoidcomprojectnode上找到。①除此之外你最好自己用Nodejs做一个项目因为通过实践你会遇到很多问题解决这些问题可以大大加深对Nodejs的理解。注意不要忘了互联网网上的资源比如Nodejs的官方API文档http:nodejsorgapi。我强烈推荐你去CNodeJS社区看看http:cnodejsorg这里汇集了许许多多中国优秀的①读者也可以到图灵社区(ituringcomcn)本书的页面上下载源代码或提交勘误。编者注前言Nodejs开发者。他们每天都在讨论着大量有关Nodejs各个方面的话题你可以在上面获得很多帮助。同时CNodeJS社区的网站也是用Nodejs写成的而且是开源的它是一个非常好的让你了解如何用Nodejs开发网站的实例。体例说明本书正文中出现的代码引用都会以等宽字体标出例如:consolelog('Nodejs')。代码段会以段落的形式用等宽字体显示例如:functionhello(){consolelog('Hello,world!')}在正文之中偶尔还会穿插一些提示和警告例如:这是一个提示。这是一个警告。致谢感谢对这本书提出宝贵意见的朋友们他们是牟瞳、李垚①、周越、钟音、萧骐②、杨旭东、孙嘉龙、范泽一、宋文杰、续本达、田劲锋、孟亚兰和李宇亮。他们为本书的结构、内容、语言表述等方面给出了许多有建设性的意见。感谢CNodeJS社区的贾超、田永强和微软亚洲研究院的杨懋以及VMware公司的柴可夫。他们不仅帮助审阅了本书还解决了许多技术问题给这本书提出了许多改进方案。感谢弓辰开发的Rime输入法③我用它完成了本书的创作。还要感谢我的朋友徐可可图灵公司的杨海玲、谢工、王军花以及各位编辑她们给我提供了许多帮助和鼓舞没有她们的激励我很难顶着巨大的学业压力坚持写完这本书。①李垚是果壳网的作者之一他的个人网站是http:wwwliyaoscom。②萧骐是DiveintoPython的译者活跃在linuxtoyhttp:linuxtoyorg。③Rime是一个优秀的开源输入法它不仅支持繁体和简体的拼音输入而且是跨平台的可以在Windows、Linux、Mac上使用其网址是:http:codegooglecomprimeime。目录目录第章Nodejs简介Nodejs是什么Nodejs能做什么异步式IO与事件驱动Nodejs的性能Nodejs架构简介Nodejs与PHPNginxJavaScript简史Netscape与LiveScriptJava与Javascript微软的加入JScript标准化ECMAScript浏览器兼容性问题引擎效率革命和JavaScript的未来CommonJS服务端JavaScript的重生CommonJS规范与实现参考资料第章安装和配置Nodejs安装前的准备快速安装MicrosoftWindows系统上安装NodejsLinux发行版上安装NodejsMacOSX上安装Nodejs编译源代码在POSIX系统中编译在Windows系统中编译安装Node包管理器安装多版本管理器参考资料第章Nodejs快速入门开始用Nodejs编程HelloWorldNodejs命令行工具建立HTTP服务器异步式IO与事件式编程阻塞与线程回调函数事件模块和包什么是模块创建及加载模块创建包Nodejs包管理器调试命令行调试远程调试使用Eclipse调试Nodejs使用nodeinspector调试Nodejs参考资料第章Nodejs核心模块全局对象全局对象与全局变量processconsole目录常用工具utilutilinheritsutilinspect事件驱动events事件发射器error事件继承EventEmitter文件系统fsfsreadFilefsreadFileSyncfsopenfsreadHTTP服务器与客户端HTTP服务器HTTP客户端参考资料第章使用Nodejs进行Web开发准备工作使用http模块Express框架快速开始安装Express建立工程启动服务器工程的结构路由控制工作原理创建路由规则路径匹配REST风格的路由规则控制权转移模板引擎什么是模板引擎使用模板引擎页面布局片段视图视图助手建立微博网站功能分析路由规划界面设计使用Bootstrap用户注册和登录访问数据库会话支持注册和登入页面权限控制发表微博微博模型发表微博用户页面首页下一步参考资料第章Nodejs进阶话题模块加载机制模块的类型按路径加载模块通过查找nodemodules目录加载模块加载缓存加载顺序控制流循环的陷阱解决控制流难题Nodejs应用部署日志功能使用cluster模块启动脚本共享端口Nodejs不是银弹参考资料附录AJavaScript的高级特性附录BNodejs编程规范索引Nodejs是什么Nodejs简介第章第章Nodejs简介Nodejs或者Node是一个可以让JavaScript运行在服务器端的平台。它可以让JavaScript脱离浏览器的束缚运行在一般的服务器环境下就像运行Python、Perl、PHP、Ruby程序一样。你可以用Nodejs轻松地进行服务器端应用开发Python、Perl、PHP、Ruby能做的事情Nodejs几乎都能做而且可以做得更好。Nodejs是一个为实时Web(RealtimeWeb)应用开发而诞生的平台它从诞生之初就充分考虑了在实时响应、超大规模数据要求下架构的可扩展性。这使得它摒弃了传统平台依靠多线程来实现高并发的设计思路而采用了单线程、异步式IO、事件驱动式的程序设计模型。这些特性不仅带来了巨大的性能提升还减少了多线程程序设计的复杂性进而提高了开发效率。Nodejs最初是由RyanDahl发起的开源项目后来被Joyent公司注意到。Joyent公司将RyanDahl招入旗下因此现在的Nodejs由Joyent公司管理并维护。尽管它诞生的时间(年)还不长但它的周围已经形成了一个庞大的生态系统。Nodejs有着强大而灵活的包管理器(nodepackagemanagernpm)目前已经有上万个第三方模块其中有网站开发框架有MySQL、PostgreSQL、MongoDB数据库接口有模板语言解析、CSS生成工具、邮件、加密、图形、调试支持甚至还有图形用户界面和操作系统API工具。由VMware公司建立的云计算平台CloudFoundry率先支持了Nodejs。年月微软宣布与Joyent公司合作将Nodejs移植到Windows同时WindowsAzure云计算平台也支持Nodejs。Nodejs目前还处在迅速发展阶段相信在不久的未来它一定会成为流行的Web应用开发平台。让我们从现在开始一同探索Nodejs的美妙世界吧!Nodejs是什么Nodejs不是一种独立的语言与PHP、Python、Perl、Ruby的“既是语言也是平台”不同。Nodejs也不是一个JavaScript框架不同于CakePHP、Django、Rails。Nodejs更不是浏览器端的库不能与jQuery、ExtJS相提并论。Nodejs是一个让JavaScript运行在服务端的开发平台它让JavaScript成为脚本语言世界的一等公民在服务端堪与PHP、Python、Perl、Ruby平起平坐。Nodejs是一个划时代的技术它在原有的Web前端和后端技术的基础上总结并提炼出了许多新的概念和方法堪称是十多年来Web开发经验的集大成者。Nodejs可以作为服务器向用户提供服务与PHP、Python、RubyonRails相比它跳过了Apache、Nginx等HTTP服务器直接面向前端开发。Nodejs的许多设计理念与经典架构(如LAMP)有着很大的不同可提供强大的伸缩能力以适应世纪年代以后规模越来越庞大的互联网环境。Nodejs与JavaScript说起JavaScript不得不让人想到浏览器。传统意义上JavaScript是由ECMAScript、Nodejs能做什么文档对象模型(DOM)和浏览器对象模型(BOM)组成的而Mozilla则指出JavaScript由CoreJavaScript和ClientJavaScript组成。之所以会有这种分歧是因为JavaScript和浏览器之间复杂的历史渊源以及其命途多舛的发展历程所共同造成的我们会在后面详述。我们可以认为Nodejs中所谓的JavaScript只是CoreJavaScript或者说是ECMAScript的一个实现不包含DOM、BOM或者ClientJavaScript。这是因为Nodejs不运行在浏览器中所以不需要使用浏览器中的许多特性。Nodejs是一个让JavaScript运行在浏览器之外的平台。它实现了诸如文件系统、模块、包、操作系统API、网络通信等CoreJavaScript没有或者不完善的功能。历史上将JavaScript移植到浏览器外的计划不止一个但Nodejs是最出色的一个。随着Nodejs的成功各种浏览器外的JavaScript实现逐步兴起因此产生了CommonJS规范。CommonJS试图拟定一套完整的JavaScript规范以弥补普通应用程序所需的API譬如文件系统访问、命令行、模块管理、函数库集成等功能。CommonJS制定者希望众多服务端JavaScript实现遵循CommonJS规范以便相互兼容和代码复用。Nodejs的部份实现遵循了CommonJS规范但由于两者还都处于诞生之初的快速变化期也会有不一致的地方。Nodejs的JavaScript引擎是V来自GoogleChrome项目。V号称是目前世界上最快的JavaScript引擎经历了数次引擎革命它的JIT(JustintimeCompilation即时编译)执行速度已经快到了接近本地代码的执行速度。Nodejs不运行在浏览器中所以也就不存在JavaScript的浏览器兼容性问题你可以放心地使用JavaScript语言的所有特性。Nodejs能做什么正如JavaScript为客户端而生Nodejs为网络而生。Nodejs能做的远不止开发一个网站那么简单使用Nodejs你可以轻松地开发:具有复杂逻辑的网站基于社交网络的大规模Web应用WebSocket服务器TCPUDP套接字应用程序命令行工具交互式终端程序带有图形用户界面的本地应用程序单元测试工具客户端JavaScript编译器。Nodejs内建了HTTP服务器支持也就是说你可以轻而易举地实现一个网站和服务器的组合。这和PHP、Perl不一样因为在使用PHP的时候必须先搭建一个Apache之类的第章Nodejs简介HTTP服务器然后通过HTTP服务器的模块加载或CGI调用才能将PHP脚本的执行结果呈现给用户。而当你使用Nodejs时不用额外搭建一个HTTP服务器因为Nodejs本身就内建了一个。这个服务器不仅可以用来调试代码而且它本身就可以部署到产品环境它的性能足以满足要求。Nodejs还可以部署到非网络应用的环境下比如一个命令行工具。Nodejs还可以调用CC的代码这样可以充分利用已有的诸多函数库也可以将对性能要求非常高的部分用CC来实现。异步式IO与事件驱动Nodejs最大的特点就是采用异步式IO与事件驱动的架构设计。对于高并发的解决方案传统的架构是多线程模型也就是为每个业务逻辑提供一个系统线程通过系统线程切换来弥补同步式IO调用时的时间开销。Nodejs使用的是单线程模型对于所有IO都采用异步式的请求方式避免了频繁的上下文切换。Nodejs在执行的过程中会维护一个事件队列程序在执行时进入事件循环等待下一个事件到来每个异步式IO请求完成后会被推送到事件队列等待程序进程进行处理。例如对于简单而常见的数据库查询操作按照传统方式实现的代码如下:res=dbquery('SELECT*fromsometable')resoutput()以上代码在执行到第一行的时候线程会阻塞等待数据库返回查询结果然后再继续处理。然而由于数据库查询可能涉及磁盘读写和网络通信其延时可能相当大(长达几个到几百毫秒相比CPU的时钟差了好几个数量级)线程会在这里阻塞等待结果返回。对于高并发的访问一方面线程长期阻塞等待另一方面为了应付新请求而不断增加线程因此会浪费大量系统资源同时线程的增多也会占用大量的CPU时间来处理内存上下文切换而且还容易遭受低速连接攻击。看看Nodejs是如何解决这个问题的:dbquery('SELECT*fromsometable',function(res){resoutput()})这段代码中dbquery的第二个参数是一个函数我们称为回调函数。进程在执行到dbquery的时候不会等待结果返回而是直接继续执行后面的语句直到进入事件循环。当数据库查询结果返回时会将事件发送到事件队列等到线程进入事件循环以后才会调用之前的回调函数继续执行后面的逻辑。Nodejs的异步机制是基于事件的所有的磁盘IO、网络通信、数据库查询都以非阻塞Nodejs的性能的方式请求返回的结果由事件循环来处理。图描述了这个机制。Nodejs进程在同一时刻只会处理一个事件完成后立即进入事件循环检查并处理后面的事件。这样做的好处是CPU和内存在同一时间集中处理一件事同时尽可能让耗时的IO操作并行执行。对于低速连接攻击Nodejs只是在事件队列中增加请求等待操作系统的回应因而不会有任何多线程开销很大程度上可以提高Web应用的健壮性防止恶意攻击。图事件循环这种异步事件模式的弊端也是显而易见的因为它不符合开发者的常规线性思路往往需要把一个完整的逻辑拆分为一个个事件增加了开发和调试难度。针对这个问题Nodejs第三方模块提出了很多解决方案我们会在第章中详细讨论。Nodejs的性能Nodejs架构简介Nodejs用异步式IO和事件驱动代替多线程带来了可观的性能提升。Nodejs除了使用V作为JavaScript引擎以外还使用了高效的libev和libeio库支持事件驱动和异步式IO。图是Nodejs架构的示意图。Nodejs的开发者在libev和libeio的基础上还抽象出了层libuv。对于POSIX①操作系统libuv通过封装libev和libeio来利用epoll或kqueue。而在Windows下libuv使用了Windows①POSIX(PortableOperatingSystemInterface)是一套操作系统API规范。一般而言遵守POSIX规范的操作系统指的是UNIX、Linux、MacOSX等。第章Nodejs简介的IOCP(InputOutputCompletionPort输入输出完成端口)机制以在不同平台下实现同样的高性能。图Nodejs的架构Nodejs与PHPNginxSnoopyxd详细对比了Nodejs与PHPNginx组合结果显示在并发连接、秒的测试下输出“helloworld”请求:PHP每秒响应请求数为平均每个请求响应时间为秒Nodejs每秒响应请求数为平均每个请求响应时间为秒。而同样的测试对MySQL查询操作:PHP每秒响应请求数为平均每个请求响应时间为秒Nodejs每秒响应请求数为平均每个请求响应时间为秒。关于Nodejs的性能优化及生产部署我们会在第章详细讨论。JavaScript简史作为Nodejs的基础JavaScript是一个完全为网络而诞生的语言。在今天看来JavaScript具有其他诸多语言不具备的优势例如速度快、开销小、容易学习等但在一开始它却并不是这样。多年以来JavaScript因为其低效和兼容性差而广受诟病一直是一个被人嘲笑的“丑小鸭”它在成熟之前经历了无数困难和坎坷个中究竟还要从它的诞生讲起。JavaScript简史Netscape与LiveScriptJavaScript首次出现在年正如现在的Nodejs一样当年JavaScript的诞生决不是偶然的。在年一个叫Nombas的公司开发了“C减减”(CminusminusCmm)语言后来改名为ScriptEase。ScriptEase最初的设计是将一种微型脚本语言与一个叫做EspressoPage的工具配合使脚本能够在浏览器中运行因此ScriptEase成为了第一个客户端脚本语言。网景公司也想独立开发一种与ScriptEase相似的客户端脚本语言BrendanEich①接受了这一任务。起初这个语言的目标是为非专业的开发人员(如网站设计者)提供一个方便的工具。大多数网站设计者没有任何编程背景因此这个语言应该尽可能简单、易学最终一个弱类型的动态解释语言LiveWire就此诞生。LiveWire没过多久就改名为LiveScript了直到现在在一些古老的Web页面中还能看到这个名字。Java与Javascript在JavaScript诞生之前Javaapplet②曾经被热炒。之前Sun公司一直在不遗余力地推广Java宣称Javaapplet将会改变人们浏览网页的方式。然而市场并没有像Sun公司预期的那样好这很大程度上是因为Javaapplet速度慢而且操作不便。网景公司的市场部门抓住了这个机遇与Sun合作完成了LiveScript实现并在网景的Navigator发布前将LiveScript更名为JavaScript。网景公司为了取得Sun公司的支持把JavaScript称为Javaapplet和HTML的补充工具目的之一就是为了帮助开发者更好地操纵Javaapplet。Netscape决不会预料到当年那个市场策略带来的副作用有多大。多年来到处都有人混淆Java和JavaScript这两个不相干的语言。两者除了名字相似和历史渊源之外几乎没有任何关系。现在看来从论坛到邮件列表从网站到图书馆能把Java和JavaScript区分开的倒是少数③。图是百度知道上的“Java相关”分类。图百度知道上的“Java相关”分类①BrendanEich被人称为JavaScript之父他完全没想到自己当年无心设计的一个语言会成为今天最流行的网络脚本语言。②applet的意思是“小程序”它是Java的一个客户端组件需要在“容器”中运行通常浏览器会充当这个容器。③BrendanEich为此抱憾不已他后来在一个名为“JavaScriptatTenYears”(JavaScript这年)的演讲稿中写道:“Don’tletmarketingnameyourlanguage”(不要为了营销决定语言名称)。第章Nodejs简介微软的加入JScript就在网景公司如日中天之时微软的InternetExplorer随WindowsOSR捆绑销售的策略堪称一颗重磅炸弹轻松击败了强劲的对手网景公司的Navigator。尽管这个做法致使微软后来声名狼藉(以及一系列的反垄断诉讼)但InternetExplorer的成功却有目共睹其成功不仅仅在于市场营销策略也源于产品本身。InternetExplorer是一个划时代产品因为它也实现了类似于JavaScript的客户端语言JScript除此之外还有微软的“老本行”VBScript。JScript的诞生成为JavaScript发展的一个重要里程碑标志了动态网页时代的全面到来。图是Windows上的InternetExplorer。图Windows上的InternetExplorer标准化ECMAScript最初JavaScript并没有一个标准因此在不同浏览器间有各种各样的兼容性的问题。InternetExplorer占领市场以后这个问题变得更加尖锐因此JavaScript的标准化势在必行。在年JavaScript标准由诸多软件厂商共同提交给ECMA(欧洲计算机制造商协会)。ECMA通过了标准ECMA也就是ECMAScript。紧接着国际标准化组织也采纳了ECMAScript标准(ISO)。在接下来的几年里浏览器开发者们就开始以ECMAScriptJavaScript简史

用户评价(12)

  • hbwqljl 高清,清晰,谢谢分享

    2013-06-20 23:51:27

  • zht66603390 这本书本来就非常好,这个PDF非常清晰,非常值得下载阅读!强烈推荐

    2013-06-08 18:59:41

  • 阿贤 这份资料太棒了,自己非常清晰,强烈推荐

    2013-05-24 07:48:31

  • gq0824303 楼主太感谢了,东西很不错

    2013-04-02 04:40:54

  • ie60 书很清晰,总共184页,很不错

    2013-03-27 07:04:34

点击加载更多内容
关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/20

Node.js开发指南_中文正版

仅供在线阅读

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利