tastynoob
Articles58
Tags18
Categories7
用express框架自己设计web服务器

用express框架自己设计web服务器

使用nodejs的express框架搭建一台web服务器

首先要安装express框架
命令行输入

1
npm install -g express

等待安装完成即可
这里是全局安装express框架
需要设置环境变量NODE_PATH
将express模块路径添加到NODE_PATH中

另外,你需要简单了解路由的概念
比如:baidu.com/file/2333.jpg
其中 “baidu.com”是host
“/file”指的就是路由,由服务器处理你需要申请访问的路由
“/file/2333.jpg” 需要就是访问的链接

接下来,直接上代码

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
74
75
76
77
78
79
80
81
82
83
84
//导入express模块
var express = require('express');
var bodyParser = require('body-parser');
var url = require('url');
var app = express();

// 创建 application/x-www-form-urlencoded 编码解析
var urlencodedParser = bodyParser.urlencoded({ extended: false })

//这里是服务器处理GET请求的方法
//'*'代表处理任何GET链接
//比如GET baidu.com/2333/ ,"/2333/"就会被该get方法所接受
//同时传递相关参数给回调函数
app.get('*', function (req, res) {

//解析传入的路由链接,如果传入的链接包含中文,需要使用URI反编码
var reqPath = decodeURI(url.parse(req.url).pathname);

//输出GET请求客户端的IP地址,以及链接
console.log('GET请求地址:' + req.ip.match(/\d+\.\d+\.\d+\.\d+/) + ";链接:" + reqPath);

//这里做个小示范
//如果GET /file/的话,就把本地路径下/file/index.html文件发送给客户端
var filePath;

if (reqPath.endsWith('/')) {

filePath = reqPath.substr(1) + 'index.html';

if (fs.existsSync(filePath)) {

//该方法可直接发送文件,包括文本,图片等...
res.sendFile(filePath);

} else {//如果没有该文件

//该方法直接发送目标数据
res.send("访问错误!!");
}
}
else {

filePath = __dirname + reqPath;

if (fs.existsSync(filePath)) {

res.sendFile(filePath);
} else {

res.send("访问错误!!");
}
}
})


//这里是处理POST请求
//'*'表示处理任何POST链接
//比如 POST /ADD/,那么“/ADD/”就会被该方法所接受
//同时传递相关参数给回调函数
app.post('*', urlencodedParser, function (req, res) {

//解析POST链接
var reqPath = decodeURI(url.parse(req.url).pathname);

console.log('POST请求地址:' + req.ip.match(/\d+\.\d+\.\d+\.\d+/) + ";链接:" + reqPath);

//打印客户端传过来的POST数据,可以是json字符串或者其它什么的
//比如客户端POST /hello,并发送“hello world”字符串,
//那么此处就会打印hello world
console.log(req.body);
//post请求也需要给客户端一个回应
res.send("成功!!");
})


//启动服务器
//web服务器需要提供80端口给外部访问
var server = app.listen(80, function () {
console.log("启动服务器");
//服务器默认的IP地址就是当前主机的IP地址
console.log(server.address());
})


当然可以可使用专门的GET,POST路由来处理专门的请求

1
2
3
4
5
6
7
8
9
10
11
app.get('/get',参数省略)
//这里只接受/get路由
//例如 baidu.com/get/ , baidu.com/get/2333.jpg
//不接受 baidu.com/233/


app.post('/post',参数省略)
//这里只接受/post路由
//例如 baidu.com/post/ , baidu.com/post/2333.jpg
//不接受 baidu.com/233/

路由也可以是某个文件

1
2
3
4
5
app.get('/233.jpg',参数省略)
//这里只接受/233.jpg路由
//例如 baidu.com/233.jpg
//不接受 baidu.com/233

如果想让客户端访问服务器中一个文件夹里所有的文件
实现一个简单的文件服务器
可以使用 “use”方法

1
2
3
4
app.use('/public', express.static('DataBase'));
//当客户端提交GET /public/233.jpg请求
//那么服务器会将本地路径下 DataBase/233.jpg发送给客户端

有关express框架详细教程可参见菜鸟教程

Author:tastynoob
Link:https://tastynoob.github.io/1970/01/01/%E7%94%A8express%E6%A1%86%E6%9E%B6%E8%87%AA%E5%B7%B1%E8%AE%BE%E8%AE%A1web%E6%9C%8D%E5%8A%A1%E5%99%A8/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×