没有合适的资源?快使用搜索试试~ 我知道了~
首页使用node.js进行服务器端JavaScript编程
使用node.js进行服务器端JavaScript编程
5星 · 超过95%的资源 需积分: 10 16 下载量 179 浏览量
更新于2023-10-23
1
收藏 52KB DOCX 举报
使用node.js进行服务器端JavaScript编程 node.js 是一个可以使用 JavaScript 开发服务器端应用的平台。它依托于 Google V8 JavaScript 引擎,并采用事件 I/O 的架构,可以用来创建高性能服务器。本文详细介绍了 node.js 的基本知识、模块化的结构、事件驱动的机制以及常用的模块。
资源详情
资源推荐
使用 node.js 进行服务器端 JavaScript 编程
是一个可以使用 开发服务器端应用的平台。它依托于 引擎,并采用事件 的
架构,可以用来创建高性能服务器。本文详细介绍了 的基本知识、模块化的结构、事件驱动的机制以及常用的模块。
随着 概念和 技术的流行,作为 应用开发中必不可少的一部分,已经得到了广泛的流行。开发人员也开始逐步的
熟悉和掌握 ,并积累了相关的开发经验。虽然 目前主要用在 应用中,以浏览器作为运行平台,但是已经有相关的尝
试把 迁移到服务器端,这其中包括 的 等。这种做法与 是异曲同工的。 允许开发人员使
用 语言来编写 前端代码。这两种做法的目的都是为了复用开发人员已经掌握的知识和积累的经验。在这点上,类似于
。
简单的来说,是一个允许开发人员使用 语言编写服务器端代码的框架。也就是说编写的 代码可以直接运行在本
地机器上,而不仅限于浏览器。从实现的角度来说,和 都使用了已有的 执行引擎。用的是 !"#$中
使用的 引擎,而 用的则是 %&'中用的 引擎。
node.js 入门
可以运行在 ()、*和 !&等主流的操作系统上。在 *平台上运行 的话,需要 %+*或是
!的支持。下面以常用的 *平台为例来说明。首先需要安装 %+*。安装的时候需要选择 ,--、'.、和
+&等包。的版本必须是最新的。接着从 参考资料 中给出的地址下载 /版本的源代码。下载解压之后,依次在 %+*中
运行 0)、'.和 '.等命令进行编译和安装。安装完成之后,直接运行 命令就可以启动 提供的命令行。
在命令行中可以直接输入 代码并运行。也可以通过 的方式来运行一个 文件 。
代码清单 1中给出了一个简单的“23程序的示例。通过 &*来运行该 文件之后,会在控制台输出“2
3。
清单 1使用 的“23程序
1. process.stdout.write("HelloWorld");
代码清单 1中的 表示的是当前运行的 进程,其属性 )表示的是进程的标准输出流。通过 *45方法向给流中写入一个
字符串。从 代码清单 1可以看到,使用 就可以访问标准输出流等本地系统上的资源。这从一个侧面反映出来了 的强大。
在 可以运行的 代码中,可以使用一些全局的对象:包括 代码清单 1中用到的 、下面会介绍的用来加载模块的
6)45方法、表示当前正在执行的 文件名的 770'、表示当前正在执行的 文件的目录的77'和与浏览
器中相似的用来执行定时任务的 ')45和 45方法等。
在介绍了 的基本知识之后,下面介绍 的模块化结构。
模块化结构
使用了 %''定义的模块系统。不同的功能组件被划分成不同的模块。应用可以根据自己的需要来选择使用合适的模块。每个模
块都会暴露一些公共的方法或属性。模块使用者直接使用这些方法或属性即可,不需要关系模块内部的实现细节。除了系统预置的多个模块之外,
应用开发团队也可以利用这个机制来将应用拆分成多个模块,以提高代码的可复用性。
使用模块
在 中使用一个模块的方式是非常简单的。使用某个模块之前需要首先声明对它的依赖。在 代码中可以直接使用全局函数
6)45来加载一个模块。如 6)48&85可以加载系统预置的 &模块。而 6)48'+!)85用来加载与当前 文
件同一目录下的 '+!)模块。如果使用 6)45的路径以“3开头的话,则认为是模块 文件在操作系统上的绝对路径。如果
不是这两种情况的话,就会尝试在当前 文件的父目录及其祖先目录下的 7') 目录下查找。比如目录
)&''+中调用了 6)48&85的话,会依次尝试查找下列文件:)&'7')&
、)7')&和 7')&。
6)45方法的返回值是该模块所暴露出来的公开 对象,包含了可供使用的方法和属性。代码清单 给出了模块的基本使用方式。
清单 模块的基本使用方式
1. vargreetings=require("./greetings.js");
2. varmsg=greetings.sayHello("Alex","zh_CN");
3. process.stdout.write(msg);
如 代码清单 所示,一般是直接把 6)45方法的返回值赋值给一个变量,在 代码中直接使用此变量即可。模块暴
露了一个 +245方法,当前 代码直接使用了该方法。
开发自己的模块
开发自己的模块的基本工作是在模块对应的 文件中编写模块相关的代码。这其中封装了模块的内部处理逻辑。一般来说,一个模块通
常会暴露一些公开的方法或属性给其使用者。模块的内部代码需要把这些方法或属性给暴露出来。代码清单 9给出了 代码清单 中所使用的
文件的内容。
清单 9模块的内容
1. varlanguages={
2. "zh_CN":"你好,",
3. "en":"Hello,"
4. };
5. exports.sayHello=function(name,language){
6. returnlanguages[language]||languages["en"]+name;
7. };
如 代码清单 9所示,对象的内容就是模块的使用者调用 6)45方法的返回值中所包含的内容。模块通过这种方式来声明其所暴露出
来的公开方法和属性。在模块中定义的变量,如 ),是只对模块内部的代码可见的。
如果一个模块所包含的内容比较多,也可以用文件夹的方式来组织。可以在文件夹的根目录下面创建一个 .文件,其内容中包含了
模块的名称和入口 文件的路径。如果没有提供这个 .文件的话,会默认在文件夹中查找 文件作为模
块的启动 文件。
在介绍完 的模块化结构之后,下面介绍其事件驱动机制。
事件驱动
开发过 应用的人都熟悉浏览器中的事件处理机制。当对某个 :!元素上的某类事件感兴趣的时候,只需要在该 :!元素上面注册一个
事件监听器即可。如 ;(48.8<$)45=>5就添加了一个对 .事件的监听器。当事件发生的时候,事件监听器的
方法就会被调用。事件的处理方法是异步执行的。这种异步执行的方式非常适合于开发高性能并发网络应用。实际上,目前的高性能
并发应用开发一般有两种做法:第一种是使用多线程的机制,另外一种就是采用基于事件驱动的方式。多线程的问题在于应用开发起来难度较高,
很容易出现线程饥饿或是死锁等问题,对开发人员提出了更高的要求。而事件驱动的方式则更加灵活,很容易为 开发人员所理解和使用,也
不存在线程死锁等问题。依托于性能强大的 引擎和先进的事件 架构,可以成为创建高性能服务器端应用的良好基础。
基于 开发应用与开发 应用有相似的编程模型。很多模块都会暴露出一些事件,使用这些模块的代码通过注册事件监听器的方式来
添加相应的处理逻辑。代码清单 /中给出了一个简单的 2 ?代理服务器的实现代码。
清单 /2 ?代理服务器
1. varhttp=require("http");
2. varurl=require("url");
3.
4. http.createServer(function(req,res){
5. varurlObj=url.parse(req.url,true);//获取被代理的 URL
6. varurlToProxy=urlObj.query.url;
7. if(!urlToProxy){
8. res.statusCode=400;
9. res.end("URL是必须的。");
10. }
11. else{
12. console.log("处理代理请求:"+urlToProxy);
13. varparsedUrl=url.parse(urlToProxy);
14. varopt={
15. host:parsedUrl.hostname,
16. port:parsedUrl.port||80,
17. path:(parsedUrl.pathname||"")+(parsedUrl.search||"")
18. +(parsedUrl.hash||"")
19. };
20. http.get(opt,function(pres){//请求被代理 URL的内容
21. res.statusCode=pres.statusCode;
22. varheaders=pres.headers;
23. for(varkeyinheaders){
24. res.setHeader(key,headers[key]);
25. }
26. pres.on("data",function(chunk){
27. res.write(chunk);//写回数据
28. });
29. pres.on("end",function(){
30. res.end();
剩余10页未读,继续阅读
carlshen8
- 粉丝: 67
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 保险服务门店新年工作计划PPT.pptx
- 车辆安全工作计划PPT.pptx
- ipqc工作总结PPT.pptx
- 车间员工上半年工作总结PPT.pptx
- 保险公司员工的工作总结PPT.pptx
- 报价工作总结PPT.pptx
- 冲压车间实习工作总结PPT.pptx
- ktv周工作总结PPT.pptx
- 保育院总务工作计划PPT.pptx
- xx年度现代教育技术工作总结PPT.pptx
- 出纳的年终总结PPT.pptx
- 贝贝班班级工作计划PPT.pptx
- 变电值班员技术个人工作总结PPT.pptx
- 大学生读书活动策划书PPT.pptx
- 财务出纳月工作总结PPT.pptx
- 大学生“三支一扶”服务期满工作总结(2)PPT.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功