nodejs学习(二)
来源:互联网 发布:澳门 一等功 知乎 编辑:程序博客网 时间:2024/05/16 18:53
一.建立 HTTP 服务器
前面的 Hello World 程序对于你来说可能太简单了,因为这个例子几乎可以在任何语言的教科书上找到对应的内容,既无聊又乏味,让我们来点儿不一样的东西,真正感受一下Node.js 的魅力所在吧。Node.js 是为网络而诞生的平台,但又与 ASP、PHP 有很大的不同,究竟不同在哪里呢?如果你有 PHP 开发经验,会知道在成功运行 PHP 之前先要配置一个功能强大而复杂的 HTTP服务器,譬如 Apache、IIS 或 Nginx,还需要将 PHP 配置为 HTTP 服务器的模块,或者使用FastCGI 协议调用 PHP 解释器。这种架构是“浏览器 HTTP 服务器 PHP 解释器”的组织方式,而Node.js采用了一种不同的组织方式,如图3-1 所示。我们看到,Node.js 将“HTTP服务器”这一层抽离,直接面向浏览器用户。这种架构从某种意义上来说是颠覆性的,因而会让人心存疑虑:Node.js作为HTTP服务器的效率足够吗?会不会提高耦合程度?我们不打算在这里讨论这种架构的利弊,后面章节会继续说明。
让我们创建一个 HTTP 服务器吧。建立一个名为 app.js 的文件,内容为:
var http = require('http');http.createServer(function(req, res) {res.writeHead(200, {'Content-Type': 'text/html'});res.write('<h1>Node.js</h1>');res.end('<p>Hello World</p>');}).listen(3000);console.log("HTTP server is listening at port 3000.");
接下来运行 node app.js命令,打开浏览器访问 http://127.0.0.1:3000,即可看到效果。
用 Node.js 实现的最简单的 HTTP 服务器就这样诞生了。这个程序调用了 Node.js 提供的http 模块,对所有 HTTP 请求答复同样的内容并监听 3000 端口。在终端中运行这个脚本
时,我们会发现它并不像 Hello World 一样结束后立即退出,而是一直等待,直到按下 Ctrl +C 才会结束。这是因为 listen 函数中创建了事件监听器,使得 Node.js 进程不会退出事件循环。我们会在后面的章节中详细介绍这其中的奥秘
使用技巧:
有时候我们可能想修改完内容刷新页面想看到效果,无论你修改了代码的哪一部份,都必须终止Node.js 再重新运行才会奏效。这是因为 Node.js 只有在第一次引用到某部份时才会去解析脚本文件,以后都会直接访问内存,避免重复载入,这时候supervisor 可以帮助你实现这个功能,它会监视你对代码的改动,并自动重启 Node.js。使用方法很简单,首先使用 npm 安装 supervisor:
$ npm install -g supervisor
如果你使用的是 Linux 或 Mac,直接键入上面的命令很可能会有权限错误。原因是 npm需要把 supervisor 安装到系统目录,需要管理员授权,可以使用 sudo npm install -g supervisor 命令来安装。接下来,使用 supervisor 命令启动 app.js:
$ supervisor app.js
当代码被改动时,运行的脚本会被终止,然后重新启动
- nodejs学习(二)
- nodejs学习总结(二)-nodejs 是什么
- Nodejs学习笔记(二)
- nodejs初级学习(二)--nodejs+express搭建WEB工程
- Nodejs学习(二)--路由(router)
- Nodejs学习笔记(二)--- 事件模块
- 菜鸟学习NodeJS笔记(二)
- nodejs学习express4.x+mongodb(二)
- Nodejs学习(二)http服务程序
- 学习nodejs笔记二
- nodejs学习二
- Nodejs学习二:Hello World
- NodeJS学习二CommonJS规范
- nodejs(二)
- Nodejs(二)
- nodejs基础(二)
- NodeJs新手入门(二)
- 初窥nodejs(二)
- 积分直方图加速HOG特征计算
- 【面试题】给定一个仅包含字母和数字(0-9)的字符串,要求找到最长递增的数字串
- A+B for Input-Output Practice (IV)
- LeetCode(21)Merge Two Sorted Lists
- android系统服务研究
- nodejs学习(二)
- ajax刷新ASP.NET Repeater控件的数据
- uva 1344
- Debian iptables
- Android开发入门之Action Bar用户交互
- G-BLASTN: Accelerating Nucleotide Alignment by Graphics Processors论文提供下载
- 今日之温故知新之判断素数
- 1001 A + B Problem II(C语言 大数加法模板)
- jsp中判断list为空(null或size==0)