网络是传输,接受信息的虚拟平台
http是node的http模块,用于创建http server服务,且支持更多特征
本地创建服务器
基础用法
在这里插入代码片const http = require('http');//引入http模块
let server = http.createServer();//创建一个http服务器
server.on('request',(req,res)=>{//绑定事件
res.write('hello word');
res.end();
});
server.listen(80,()=>{//监听端口
console.log('server in running')
})
简写与上一种方法相同
const http = require('http');//引入http模块
http.createServer((req,res)=>{
res.write('hello word');
res.end();
}).listen(80,()=>{
console.log('Server in Running');
console.log('http://127.0.0.1')
})
响应头
状态码
http状态码是用来表示网页服务器响应状态的三位数字代码
状态码非常多,用的到的就这几个,标重点的是常用的## 标题
- 1xx:表示普通消息
- 2xx:表示服务器响应成功
-
200(响应成功)【重】
- 3xx:表示重定向
-
301(永久重定向)【重】
-
302(零时重定向)
-
304(使用缓存)
- 4xx(无法访问)
-
403(权限不足,无法访问)
-
404(找不到资源)【重】
- 5xx(服务器有错)
-
500(服务器端代码有错)【重】
-
502(网关错误)
-
503(服务器崩溃)
mine类型
简单的说mine是一个互联网标准,通过设定他可以规定不同类型文件在浏览器中以何种方式打开
找到了几个常用的对应的key值为文件后缀名,value值为对应的mine类型
const mimeTypes = {
'.css': 'text/css',
'.gif': 'image/gif',
'.html': 'text/html',
'.ico': 'image/x-icon',
'.jpeg': 'image/jpeg',
'.jpg': 'image/jpeg',
'.js': 'text/javascript',
'.json': 'application/json',
'.pdf': 'application/pdf',
'.png': 'image/png',
'.svg': 'image/svg+xml',
'.swf': 'application/x-shockwave-flash',
'.tiff': 'image/tiff',
'.txt': 'text/plain',
'.wav': 'audio/x-wav',
'.wma': 'audio/x-ms-wma',
'.wmv': 'video/x-ms-wmv',
'.xml': 'text/xml'
};
了解了状态码,和mine类型,它们都是写在响应头中的
响应头中一般还要写入charset属性规定HTML文档的字符编码,避免文字乱码
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"})//写响应头res.writeHead(状态码,{规定mine编码})
实现不同请求返回不同数据
默认不设置文件名中,任何url的文件名都跳转同一页面
const http = require('http');//引入http模块
http.createServer((req,res)=>{
if (req.url === '/') {
res.write('<h1>hello word</h1>');
res.end();
}else if(req.url==='/new.html'){
res.write('<h1>news</h1>');
res.end();
}else if(req.url === '/about.html'){
res.write('<h1>我的</h1>');
res.end();
}
}).listen(80,()=>{
console.log('Server in Running');
console.log('http://127.0.0.1')
})
实现不同的文件名跳转至不同的页面
制作一个静态网页服务器
const http = require('http');//引入http模块
const path = require('path');//引入路径模块
const fs = require('fs');//引入fs模块
http.createServer((req,res)=>{
if (req.url === '/') {
req.url = '/index.html';//制造一个默认的主页面
};
let urlS = path.join(__dirname,'..',req.url);//整理路径,需要根据本身的html位置决定
let ext = path.parse(urlS).ext;//取得文件的后缀名
let mineExt = { //写mine类型,可以通过得到的后缀名获得具体的状态码
'.css': 'text/css',
'.gif': 'image/gif',
'.html': 'text/html',
'.ico': 'image/x-icon',
'.jpeg': 'image/jpeg',
'.jpg': 'image/jpeg',
'.js': 'text/javascript',
'.json': 'application/json',
'.pdf': 'application/pdf',
'.png': 'image/png',
'.svg': 'image/svg+xml',
'.swf': 'application/x-shockwave-flash',
'.tiff': 'image/tiff',
'.txt': 'text/plain',
'.wav': 'audio/x-wav',
'.wma': 'audio/x-ms-wma',
'.wmv': 'video/x-ms-wmv',
'.xml': 'text/xml'};
fs.readFile(urlS,(err,data)=>{//读对应的html文件
if (err) {
res.writeHead(404,{'Content-Type':'text/html;charset=utf-8'});
res.write('找不到数据');
res.end();
} else {
res.writeHead(200,{'Content-Type':mineExt[ext]+';charset=utf-8'});
res.write(data);
res.end();
}
})
}).listen(80,()=>{
console.log('Server in Running');
console.log('http://127.0.0.1')
})