要点:
1、处理路由(对请求的处理)
2、对fs、http、art-template模块的运用
步骤
1、新建一个目录,用npm对项目进行初始化
在项目目录下
1
npm init
按照npm的提示引导填写项目信息
或者直接用这个进行默认初始化
1
npm init -y
这时在项目目录下会产生
- node_modules 文件夹
- 所有要用到的模块都放在这
- 核心模块
- 自己加载的第三方模块
- 所有要用到的模块都放在这
- package.json 文件
- 存储项目信息和模块依赖
继续在项目目录新建如下文件结构
public 存放公开的静态资源
- css
- img
- js
- lib
views 存放页面
app.js 服务的启动文件
README.md 项目的说明文件
安装art-template模板引擎模块
也是在项目目录
1
npm install --save art-template
此时在package.json中可以观察到依赖项”dependencies”多了个art-template
2、打开app.js开始编写服务程序
如下是程序代码(第一次学的时候写了很详细的注释)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73//引入核心模块
var http = require('http')
var fs = require('fs')
var template = require('art-template')
var url = require('url')
//暂且用数组来存放留言数据
var comments = []
//使用http实例创建服务器
http
.createServer(function (req,res) {
//url模块可以用来提取url中的信息
var parseObj = url.parse(req.url, true)
var pathName = parseObj.pathname
//url请求根目录 /
if (pathName === '/') {
//fs模块实例读取文件
fs.readFile('./views/index.html', function (err, data) {
if (err) {
return res.end('404 Not Found1.')
}
//使用模板引擎的render()将留言数据渲染到index.html页面
var htmlStr = template.render(data.toString(), {
comments : comments
})
//结束浏览器等待并返回页面
res.end(htmlStr)
})//url请求写留言页面,此处判断请求是否是以/post开头
} else if (pathName.indexOf('/post') === 0) {
//跟上面一样也是读文件然后返回
fs.readFile('./views/post.html', function (err, data) {
if (err) {
return res.end('404 Not Found2')
}
res.end(data)
})//页面中有些link请求css样式
} else if (pathName.indexOf('/public/') === 0) {
//你请求啥,我就利用你请求的路径去去啥(pathName)
fs.readFile('.' + pathName, function (err, data) {
if (err) {
return res.end('404 Not Found3')
}
res.end(data)
})//url提交评论请求
} else if (pathName === '/pinglun') {
//提取url中?后面的信息并返回一个对象
var comment = parseObj.query
var dateTime = new Date()
comment.dateTime = dateTime.getFullYear()+'-'+(dateTime.getMonth()+1)+
'-'+dateTime.getDate()+ ' '+dateTime.getHours()+
':'+dateTime.getMinutes()+':'+dateTime.getSeconds()
comments.unshift(comment)
//301永久重定向:浏览器会记住,每次自己就跳转了
//302临时重定向:浏览器不会记住,每次都会向服务器发请求来重定向
res.statusCode = 302
res.setHeader('Location', '/')
res.end()
} else {
fs.readFile('./views/404.html', function(err, data) {
if (err) {
return res.end('您的页面失联了')
}
res.end(data)
})
}
})
//开启服务器监听3000端口
.listen(3000, function () {
console.log('running ...')
})
3、把静态资源放到public文件夹中,把写好的页面放到views中
index.html
1 | <!DOCTYPE html> |
post.html
1 | <!DOCTYPE html> |
404.html
1 | <!DOCTYPE html> |
4、开启服务器
- 然后执行app.js开启一个服务器
- 在浏览器输入127.0.0.1:3000进行访问
这里有一点要注意:由于使用[]储存留言数据,因此数据没有持久化,每次重启服务,留言就会清空