NodeJs学习笔记3

  |  

前言

这部分进行如何使用Node.js进行Web开发的学习


21



准备工作

在通过Node.js进行Web开发之前,我们需要了解到Node.js与传统的后端语言不同的地方。传统架构中的HTTP服务器的角色由Apache、Nignx和IIS之类的软件来担任,但是Node.js不需要。Node.js提供了HTTP模块,可以直接应用到生产环境。

Node.js和其它的语言相比还有一个显著的区别,在于它的原始封装程度较低。

使用http模块

Node.js由于不需要另外的HTTP服务器,因此减少了一层抽象,给性能带来了不少的提升,但是同时的也提高了开发难度。我们以一个简单的post表单的提交和获取来举例。

我们首先来写一个提交页面

1
2
3
4
5
6
7
8
9
<html>
<body>
<form method="post" action="http://localhost:3000/">
<input type="text" name="title">
<textarea name="text"></textarea>
<input type="submit" />
</form>
</body>
</html>

这个表单包含了两个字段:title和text,提交时以post的方式提交到本地的3000端口,假设我们现在要将两个字段的内容原封不动的返还给用户端。这里我们就要使用Node.js的http模块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var http = require("http");
var querystring = require("querystring");

var server = http.createServer(function(req, res) {
var post = "";

req.on('data', function(chunk) {
post += chunk;
})
req.on("end", function() {
post = querystring.parse(post);
res.write(post.title);
res.write(post.text);
res.end()
})
}).listen(3000);

分析整个过程,我们先创建了一个http实例,在其请求处理函数中中手动编写req对象的时间监听器。当客户端请求到达时,我们将Post数据暂时存放在闭包变量中,直到end事件触发,解析POST请求,处理后返回给客户端。

整个过程显得复杂的原因是因为Node.js的http模块提供的是底层的接口。虽然使用起来相对复杂,但是可以加深我们对http协议的理解。

但是如果我们在生产环境中直接使用http模块进行开发,整个开发过程会相对十分复杂。所以我们需要一个完整的框架来提供相应的接口。

express框架

express作为开发框架,是目前最稳定、使用最广泛的,而且是Node.js官方推荐的唯一一个Web开发框架。

Express除了为http模块提供了更高层的接口外,还是实现了许多功能,包括:

  • 路由控制
  • 模板解析支持
  • 动态视图
  • 用户会话
  • CSRF保护
  • 静态文件服务
  • 错误控制器
  • 访问日志
  • 缓存
  • 插件支持

如果我们要使用express框架实现上一个例子的功能,我们可以将代码压缩到十行之内

1
2
3
4
5
6
7
var express = require("express");
var app = express.createServer();
app.use(express.bodyParser());
app.all('/', function(req, res){
res.send(req.body.title, req.body.text);
})
app.listend(3000);
文章目录
  1. 1. 准备工作
    1. 1.1. 使用http模块
    2. 1.2. express框架