在Web编程中,最常用的HTTP方法有GET,POST,DELETE,PUT,这些标准的HTTP方法构成了WEB应用程序中一套基本的RESTful原则。
这里通过Node最简单HTTP模块来实现一个完整的todo-list命令行程序,也就是常说的CLI(command-line interface),通过它了解一下HTTP中最基本的方法。
服务器与客户端的交互不通过浏览器实现,而通过最纯粹的命令行工具curl
来实现,使其方法更加透明而便于理解。减少中间写HTML代码的环节。
cURL - Download从这个界面下载,*nix系统基本上都自带有,Windows用户需要下载该命令行工具。
接触Node首先就是使用HTTP模块写出打印Hello,world的服务器,这才是真正意义上Node的Hello,world
,代码如下:
1 2 3 4 5 6
| var http = require('http'); http.createServer(function (req,res){ res.writeHead(200 , {"Content-Type" : "text/html"}); res.end('Hello,world'); }).listen(9000); console.log("Your server is started @ http://localhost:9000");
|
使用浏览器访问http://localhost:9000
就可以打印出Hello,world
。
下面todo-list的例子,通过对req.method
请求方法的判断,对服务器发起HTTP的POST
,DELETE
,GET
等基本方法。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| var http = require('http'); var url = require('url') var items = []; http.createServer(function(req,res) { switch (req.method){ case 'POST': var item = ''; req.setEncoding('utf8'); req.on('data', function(chunk){ item += chunk; }); req.on('end',function(){ items.push(item); res.end('add success!\n','utf8'); }); break; case 'GET': for (var i =0 ; i < items.length ; i ++){ res.write(i + ') ' + items[i] + '\n','utf8'); } res.end(); break; case 'DELETE': var pathname = url.parse(req.url).pathname; var i = parseInt(pathname.slice(1) , 10); if (isNaN(i)){ res.statusCode = 400; res.end('Invalid item id!\n'); }else if (!items[i]){ res.statusCode = 404; res.end('Item not found!\n'); }else{ items.splice(i , 1); res.end('delete success!\n'); } break; } }).listen(9000); console.log('Your server is started @9000');
|
上面代码显示了POST请求的处理方法,以及Delete Item的时候,对防错的一些处理方法。对程序的健壮性有一定的保障。当然功能上还是非常弱的。
将上面代码保存为app.js
,启动服务器:node app.js
。
- 输入
curl -d "read book" http://localhost:9000
发起POST请求,添加一条item;
- 输入
curl http://localhost:9000
发起GET请求,获取item列表;
- 输入
curl -X DELETE http://localhost:9000/0
删除第0条item。
OK了,自己尝试一下吧。
本文例子取自《Node.js实战》一书。