nodejs

piaoling  2014-04-25 12:58:42

Node.js

前提

  • 环境:windows7
  • 下载地址:http://nodejs.org/download/

安装

官网下载一个安装文件点击下一步安装完成即可.

验证安装是否成功:node -v


 

基本HTTP服务器

c:/http.js

Js代码  收藏代码
  1. //http是内置模块、直接引入  
  2. var http = require('http');  
  3.    
  4. http.createServer(function (req, res) {  
  5.   res.writeHead(200, {'Content-Type''text/plain'});  
  6.   res.end('Hello World ');  
  7. }).listen(8080);  
  8.    
  9. console.log('Server running on port 8080.');  

 

 运行 


 

访问

http://localhost:8080

 

小结
 该例中所创建的并不是一个功能全面的HTTP服务器,它并不能处理任何HTML文件、图片。事实上,无论你http://localhost:8080/后添什么,请求后,它都将返回“Hello World”

 

express框架【处理GET和POST请求】

Express是对Node.js的一个高性能的封装,是Node.js上最流行的高性能Web开发框架。

如果你用过Ruby的Sinatra.rb, 会觉得Express非常熟悉。Express作者是参考sinatra, 写了一个基于node.js的实现。

 

安装

第一步:在任意磁盘创建hello-world目录

 

第二步:进入hello-world目录执行:npm info express version  查看express最新版本,可以看到版本号

 

第三步:在hello-world目录中新建文件名为:package.json,内容如下,主要将第二步的版本号填入

Js代码  收藏代码
  1. {    
  2.     "name""hello-world",    
  3.     "description""hello world test app",    
  4.     "version""0.0.1",    
  5.     "private"true,    
  6.     "dependencies": {    
  7.         "express""3.3.8"    
  8.     }    
  9. }  

    package.json文 件包含了应用程序的基本信息。其中“dependencies”部分描述了你想安装模块的名称和版本。该案例,接受Express 3.3.8版本,如果是3.3表示接受3.3相关的任何版本。你可以在该部分列出你想要的所有依赖。 如果你想安装其他的依赖模块,类似安装 express一样,可以在dependencies中定义你的模块名称和版本,执行npm install即可安装,一旦找到,即可安装所列出的所有依赖。 

 

第四步:在hello-world目录下执行:npm install进行安装.

      一旦npm安装依赖包完成,项目根目录下会出现node_modules的子目录。项目配置所需的express包都存放于这里。

 

说明:第三步和第四步还有更简单的操作方式,直接输入命令:npm install express,会出现如下画面直到安装完成



 

第五步:nmp ls验证express是否安装完成


 

一:处理GET请求

c:/hello-world/app.js

Js代码  收藏代码
  1. var express = require('express');    
  2. var app = express();   
  3. //接着,我们可以使用app.动词()定义路由。  
  4. //比如使用"GET /"响应"Hello World"字符串,因为res、req都是Node提供的准确的对象,因此你可以调用res.pipe()  
  5. //或req.on('data', callback)或者其它。  
  6. //app.get('/hello.txt', function(req, res){    
  7. //    var body = 'Hello World';    
  8. //    res.setHeader('Content-Type', 'text/plain');    
  9. //    res.setHeader('Content-Length', body.length);    
  10. //    res.end(body);    
  11. //});    
  12.   
  13. //ExpressJS框架提供了更高层的方法,比如res.send(),它可以省去诸如添加Content-Length之类的事情。如下:  
  14. //处理GET请求  
  15. //http://127.0.0.1:8080/hello/?name=wujintao&email=cino.wu@gmail.com  
  16. app.get('/hello/*'function(req, res){  
  17.     console.log(req.query.name);  
  18.     console.log(req.query.email);  
  19.     res.send('Get Over');    
  20. });    
  21. //以上表示凡是url能够匹配/hello/*的GET请求,服务器都将向客户端发送字符串“Hello World"  
  22.   
  23. //app.get('/', function(req, res){  
  24. // res.render('index', {  
  25. //    title: 'Express'  
  26. //  });  
  27. //});  
  28. //上面的代码意思是,get请求根目录则调用views文件夹中的index模板,并且传入参数title为“Express”,这个title就可以在模板文件中直接使用。  
  29.   
  30.   
  31. //现在可以绑定和监听端口了,调用app.listen()方法,接收同样的参数,比如:  
  32. app.listen(8080);    
  33. console.log('Listening on port 8080');    

 

运行

 


 

GET请求

 请求:http://127.0.0.1:8080/hello/?name=wujintao&email=cino.wu@gmail.com

 通过Chrome的DEV HTTP CLIENT插件请求结果如下:

 

服务器日志信息如下:



 

二:处理POST请求
 c:/hello-world/app.js

Js代码  收藏代码
  1. var express = require('express');    
  2. var app = express();   
  3. app.configure(function() {  
  4.   //默认情况下Express并不知道该如何处理该请求体,因此我们需要增加bodyParser中间件,用于分析  
  5.   //application/x-www-form-urlencoded和application/json  
  6.   //请求体,并把变量存入req.body。我们可以像下面的样子来“使用”中间件[这个保证POST能取到请求参数的值]:     
  7.   app.use(express.bodyParser());  
  8. });  
  9.   
  10. //处理POST请求  
  11. //name和email是POST请求域中的参数名  
  12. app.post('/hello'function(req, res) {  
  13.     console.log(req.body.name);  
  14.     console.log(req.body.email);  
  15.     res.send('Post Over');    
  16. });  
  17.   
  18. post_mtd = function(req,res){  
  19.   res.send('我是Wujintao');  
  20. }  
  21. //其中这两种形式中的function均可以定义在外部,然后引进方法名即可。其中方法post_mtd要在引用其前定义  
  22. app.post("/wujintao",post_mtd);  
  23.   
  24. //除了app.get、app.post这种形式外,还可以采用:app.all在这里all表示get,post等任何一种请求方式,当然也可以指定为某种特定的请求方式。  
  25. //或者app['get']('/path', function(req,res));这种形式。  
  26.   
  27. //现在可以绑定和监听端口了,调用app.listen()方法,接收同样的参数,比如:  
  28. app.listen(8080);    
  29. console.log('Listening on port 8080');  

 运行


 

POST请求

 请求:http://127.0.0.1:8080/hello

 通过Chrome的DEV HTTP CLIENT插件请求结果如下:


 

服务器日志信息如下:



 

 

至此,HTTP服务器处理GET和POST请求已经详细讲完

 

参考资料

http://www.nodejs.org/api/http.html#http_http_request_options_callback

http://www.nodejs.org/api/

https://github.com/visionmedia/express

 

http://expressjs.com/guide.html

类别 :  默认(739)  |  浏览(4584)  |  评论(0)
发表评论(评论将通过邮件发给作者):

Email: