1、使用http模块
Nodejs不需要另外的HTTP服务器,因此减少了一层抽象,性能有了不少的提升,但同时也提高了开发难度,下面用一个post案例,来理解Nodeweb的运行流程
<span style="font-size:18px;"><form method="post" action="http://127.0.0.1:3000">
<input type="text" name="title"/>
<textarea name="text"></textarea>
<input type="submit"/>
</form></span>
这个表单包含两个字段,title和text,提交的方式是post,将数据以post的方式提交给http://127.0.0.1:3000/。假设该案例的功能是将提交的数据原封不动的返回给页面。
则服务端的实现代码如下:
var http = require('http');
var util = require('util');
var queryString =require('querystring');
http.createServer(function(req,res){
var post ='';
req.on('data',function(chunk){
post+=chunk;
});
req.on('end',function(){
post= queryString.parse(post);
res.end(util.inspect(post));
console.log(post);
});
}).listen(3000);
实现效果如下:
客户端:post数据
服务端返回的数据
也可以用这种方式返回数据
post= queryString.parse(post);//查询post数据
res.write(post.title);
res.write(post.text);
res.end();//必须写,否则无法返回
2、Express模块
Express模块是Nodejs作为一个web框架,也是官方唯一推荐的一个框架,Express除了为Http提供高层接口外,还实习了许多其他的功能。
2.1 路由控制
2.2模板解析支持
2.3动态视图
2.4用户会话
2.5CSRF保护
2.6静态文件服务
2.7错误控制器
2.8访问日志
2.9缓存
2.10插件支持
下面用Express重新实现前面的例子
var express=require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser());
app.all('/',function(req,res){
res.send(req.body.title+req.text);
console.log(req.body.title);
});
app.listen(3000);
可以看到不需要req的监听事件,只需要express.bodyParser(),就能直接通过req.body获取post数据