开发者课程【Node.js 入门与实战:构建 http 服务程序-根据不同请求做出不同响应 】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/588/detail/8259
构建 http 服务程序-根据不同请求做出不同响应
内容介绍
一、用户请求
二、根据用户的不同请求做出不同响应
一、用户请求
代码如下:
// 2. 创建一个http服务对象
var server = http.createServer();
// 3. 监听用户的请求事件(request事件)
// request 对象包含了用户请求报文中的所有内容,通过request对象可以获取所有用户提交过来的数据
// response 对象用来向用户响应一些数据,当服务器要向客户端响应数据的时候必须使用 response 对象
// 有了request 对象 和 response对象,就既可以获取用户提交的数据,也可以向用户响应数据了
Server.on(
‘
request
’
, function (req, res) {
// 解决乱码的思路:服务器通过设置http响应报文头,告诉浏览 器使用相应的编码来解析网页
res . setHeader( ' Content-Type',
'text/html; charset=utf-8');
res .write( 'Hello <h1>World</h1>
!!!!你好世界! ');
//对于每一个请求,服务器必须结束响应,否则客户端(浏览器)会一直等待服务器响应结束
res. end();
});
如何达到用户请求路径:
看请求报文头,访问网站根目录时请求报文头的路径是“/”,
当访问根目录下/abc
再访问根目录下/abc下的/fds/fds/fds/f/sfs/faa
出现的都是不一样的结果。
请求报文头里面的数据在request对象里,request对象是当用户服务器解析的请求报文生成的对象。
request对象里面的req.url属性能拿到这次请求路径的属性。
// 4. 启动服务
server. listen(8080, function () {
console.log('服务器启动了,请访问: http://localhost:8080' );
});
二、根据用户的不同请求做出不同响应
新建一个代码
步骤:1.加载http模块
2. 创建http服务
3. 监听request事件
4. 启动服务
代码如下:
//根据用户的不同请求,服务器做出不同的响应
// 1.加载http模块
var http = require('http');
// 2.创建http服务
http . createServer(function (req,
res)
{
//获取用户请求的路径req.url
console.1og(req.url);
//结束响应
res.end( );
// 通过req.url获取用户请求的路径,根据不同的请求路径服务器做出不同的响应
if (req.url ===
‘
/
’
| | req.url ===
‘
/index
’
) {
// res.write(
‘
hello index
’
);
// res.end();
res.end(
‘
Hello Index
’
);
}
else if (req.url ==
=
' /login')
{
res .end('Hello login' );
}
else if (req.url ===' /list')
{
res.end( 'Hello List');
}
else if (req.url === ' /register')
{
res.
end('Hello Register');
}
else
{
res.end('404, not Found
.
客户端错误! @');
}
}).listen(8080, function () {
console. log( 'http://localhost:8080');
});
(1)运行结果:
浏览器会自动请求网站图标文件
当请求网站根目录时浏览器自动向favicon发起请求,所以会出现两个 /favicon.ico 。
当在根目录下写/abc 出现的结果为 /abc/favicon.ico ;在再后面写/x.html 结果为favicon.ico 。
发现通过request对象的url属性就能拿到用户每次请求的路径。(2)通过req.url获取用户请求的路径,根据不同的请求路径服务器做出不同的响应:
假设当用户请求/根目录的时候,响应一个hello index;当用户请求/index,也响应一个hello index; 当用户请求/login,响应一个hello login;当用户请求/list,响应一个hello list;当用户请求/register,响应一个hello register;这样用户请求不同路径,给出的是不同的响应。
如果是请求if (req.url ===
‘
/
’
| | req.url ===
‘
/index
’
)
这两种情况,向用户响应一个hello index。
可以写如下代码:res.write(
‘
hello index
’
);
res.end();
也可以简便成一句代码:res.end(
‘
Hello Index
’
);
如果用户请求的不是这些:
if (req.url ===
‘
/
’
| | req.url ===
‘
/index
’
) {
res.end(
‘
Hello Index
’
);
}
else if (req.url ==
=
' /login')
{
res .end('Hello login' );
}
else if (req.url ===' /list')
{
res.end( 'Hello List');
}
else if (req.url === ' /register')
{
res.
end('Hello Register');
这时我的网站没有处理其他网站的功能,其他情况下就是如下代码:
}
else
{
res.end('404, not Found
.
客户端错误! @');
}
运行结果:
请求结果错误的。
解决乱码的问题直接来一个响应头:res.setHeader(
‘
Content-Type
’
,
‘
text/plain; charset=utf-8
’
);
再次运行错误请求结果如下:
服务器只写我们要处理的路径,对于不处理的路径一概是404。
比如请求百度下不存在的路径出现的结果就是: