引言
今天学习目标,实现apache功能。
搭建真正的web服务器。
在node点js中有一个核心模块 HTTP
一:体验一把这个模块http
①:老规矩 引入模块
var http = require("http");
②:使用http,创建web服务器。
var server = http.createServer();
上述已经创建好服务器啦。
了解一下服务器功能:
对数据的处理,发送请求,接收请求,返回结果。
③:接收用户请求 request()
单次监听。是否接收
server.on("request",function(){
console.log("收到用户请求啦!");
}
④:接收到请求,要启动服务器啦。listen端口号3000是否开启
server.listen(3000,function(){
console.log("服务器启动成功~可以通过http://127.0.01:3000访问啦~~~");
})
运行一下上面的js文件,看看结果:
二:关于request 接收用户请求事件。
两个参数:
1.request 请求的对象(获取客户端请求信息)
2.response 响应对象(发送响应信息给客户端)
体验一把。老样子
①:引入模块
②:创建服务器
③:接收并响应
④:结束响应 response.end()
⑤:启动服务器
var http = require("http");
var server = http.createServer();
server.on("request",function(request,response){
console.log("收到请求啦,请求路径为:"+request.url);
response.end();
{
三:正确的返回数据。
上面看到的是返回该请求路径,我们返回一个文本,一个页面试一下。
返回在response.write(“”)中填写汉字不会被解析。
我们需要设置请求头的字符编码格式解析汉字。
请求头:setHeader("Conten-type")
var http = require("http");
var server = http.createServer();
server.on("request",function(req,res){
var url = req.url;
if(url == "/txt"){
/* 返回纯文本,页面不解析html标签 */
res.setHeader("Content-type","text/plain;charset=utf-8");
res.end("<p>我是txt文件</p>");
}else if(url == "/html"){
res.setHeader("Content-Type","text/html;charset=utf-8");
res.end("<u>我是有下划线的html文件</u>");
}
})
server.listen(3000,function(){
console.log("running");
})
cmd运行结果:
客户端运行结果:
四:返回一个正确的html文件
上面知识返回类型需要设置请求头识别字符编码。
现在读取文件并作为响应返回。用到昨天的文件模块啦。
①:引入http服务器模块,引入文件fs模块
②:用http模块的方法createServer方法创建服务器。
③:单次监听请求request。
④:读取响应文件。设置请求头并end出去。
⑤:打开服务器。
var http = require("http");
var fs = require("fs");
var server = http.createServer();
server.on("request",function(req,res){
var url = req.url;
if(url =="/"){
fs.readFile("./repage01.html",function(err,data){
if(err){
res.setHeader('Content-Type','text/plain; charset=utf-8');
res.end('文件读取失败' + err)
}else{
res.setHeader('Content-Type', 'text/html; charset=utf-8');
res.end(data);
}
})
}
})
server.listen(3000,function(){
console.log('running:127.0.0.1:3000...........')
})
cmd运行界面:
端口界面: