nodejs学习之(服务器搭建,封装服务器)服务器搭建
let http =require('http')
// 调⽤createServer⽅法创建实例
let server = ateServer()
// 绑定⼀个request事件处理函数
// 这个函数得作⽤就是处理接收请求,并且根据url进⾏不同得处理
// 接收到请求,后⾯有两个回调函数得参数,分别是请求得信息,和响应得信息
<('request',(req,res)=>{
// 设置请求头编码
res.writeHead(200,{'Content-Type':'text/html;charset=UTF-8'})
let url = req.url
if(url ==='/'){
}else if(url==='fenlei'){
}else if(url ==='wode'){
}else{
}
})
// 开始服务器,监听端⼝号
server.listen(3000,()=>{
console.log('服务器已经开启,可以通过访问127.0.0.1:3000/来获取数据');
})
设置状态码和响应头
response.writeHead(200,{'Content-Type':'text/plain'});
设置响应头
response.setHeader('Content-Type','text/html');
写⼊内容
response.write(fileData);
结束响应
封装服务器
let http =require('http')
let path =require('path')
let url =require('url')
class app {
constructor(){
console.log('进来');
this.server = ateServer()
// 定义⼀个对象来存放url和他得回调函数,在调⽤on得使⽤,根据url来调⽤函数
js获取json的key和valuethis.objEvent ={}
// },
/
/ '/aa':function (req,res){ console.log('<h1>我得<h1>');
('request',(req,res)=>{
// 解析路径,⽐如 "/" { root: '/', dir: '/', base: '', ext: '', name: '' }
let pathObj =path.parse(req.url)
// 检测url是否为obj对象中已经定义好得对象,否则就404
// 由于在objEvent中定义得是以url 为键值,以fn为值得形式
// 在执⾏on⽅法得事情,其实if也是⼀种循环,当检测到objEvent⾥⾯得有值得时候,就会执⾏下⾯得东西if(pathObj.dir in this.objEvent){
// 把路径后⾯得传给下⾯req
req.path1 = pathObj.base
this.objEvent[pathObj.dir](req,res)
}else{
res.writeHead(200,{'Content-Type':'text/html;charset=UTF-8'})
}
})
}
on(url,fn){
// 把fn赋值给键值url得值
this.objEvent[url]= fn;
}
run(port,callback){
this.server.listen(port,callback)
}
}
let a =new app()
<('/',(req,res)=>{
})
<('/aa',(req,res)=>{
res.writeHead(200,{'Content-Type':'text/html;charset=UTF-8'})
if(req.path1 ==='index.html'){
}else{
}
})
a.run(80,()=>{
console.log("服务器其启动");
})
实现静态服务器
能够根据需要请求的⽂件,原封不动的将服务器磁盘中的数据直接返回给到浏览器。
let http =require('http')
let path =require('path')
let fs =require('fs')
class app {
constructor(){
this.server = ateServer()
this.objEvent ={}
// 第⼀步⾸先在构造函数⾥⾯定义⼀个访问静态⽬录得url
this.staticdir ='/static'
('request',(req,res)=>{
let pathObj =path.parse(req.url)
if(pathObj.dir in this.objEvent){
req.path1 = pathObj.base
this.objEvent[pathObj.dir](req,res)
/
/ 第⼆步然后判断如果是访问静态⽬录
}else if(pathObj.dir ==this.staticdir ){
// 第三步,改变⼀下后缀名
res.writeHead(200,{'Content-Type':)}) // 第四步,读取静态⽬录⾥⾯得内容
let rs = fs.createReadStream('./static/'+ pathObj.base)
// 第五步,返回给浏览器
rs.pipe(res)
}
else{
res.writeHead(200,{'Content-Type':'text/html;charset=UTF-8'})
}
})
}
on(url,fn){
// 把fn赋值给键值url得值
this.objEvent[url]= fn;
}
run(port,callback){
this.server.listen(port,callback)
}
getgetContentType(extName){
switch(extName){
case".jpg":
return"image/jpeg";
case".html":
return"text/html;charset=utf-8";
case".js":
return"text/javascript;charset=utf-8";
case".json":
return"text/json;charset=utf-8";
case".gif":
return"image/gif";
case".css":
return"text/css"
}
}
}
let a =new app()
// 第六步,也是重点,在这⾥可以惊醒修改访问静态⽬录得url
a.staticdir ='/qqq'
<('/',(req,res)=>{
})
<('/aa',(req,res)=>{
res.writeHead(200,{'Content-Type':'text/html;charset=UTF-8'})
if(req.path1 ==='index.html'){
}else{
}
})
a.run(80,()=>{
console.log("服务器其启动");
})
实现通关url进⾏动态渲染
根据url的值来获取不同序列号的值
let http =require('http')
let path =require('path')
class app {
constructor(){
console.log('进来');
this.server = ateServer()
// 定义⼀个对象来存放url和他得回调函数,在调⽤on得使⽤,根据url来调⽤函数
this.objEvent ={}
// },
/
/ '/aa':function (req,res){ console.log('<h1>我得<h1>');
('request',(req,res)=>{
// 解析路径,⽐如 "/" { root: '/', dir: '/', base: '', ext: '', name: '' }
let pathObj =path.parse(req.url)// 第三步,获取路由
// 检测url是否为obj对象中已经定义好得对象,否则就404
// 由于在objEvent中定义得是以url 为键值,以fn为值得形式
// 在执⾏on⽅法得事情,其实if也是⼀种循环,当检测到objEvent⾥⾯得有值得时候,就会执⾏下⾯得东西if(pathObj.dir in this.objEvent){// 第四步,检测路由在不在保存得对象⾥
this.objEvent[pathObj.dir](req,res)// 第五步,再得话执⾏回调函数
req.path1 = pathObj.base // 第六步,定义路由后⾯得⼦路由,放到req⾥⾯}else{
res.writeHead(200,{'Content-Type':'text/html;charset=UTF-8'})
}
})
}
on(url,fn){// 第⼆步,把路由通关键值为序号,回调为值得⽅式保存起来// 把fn赋值给键值url得值
this.objEvent[url]= fn;
}
run(port,callback){
this.server.listen(port,callback)
}
}
let a =new app()
<('/',(req,res)=>{
})
<('/aa',(req,res)=>{
res.writeHead(200,{'Content-Type':'text/html;charset=UTF-8'})
if(req.path1 ==='index.html'){
}else{
}
})
<('/movie',(req,res)=>{// 第⼀步,定义路由
res.writeHead(200,{'Content-Type':'text/html;charset=UTF-8'})
let movie=[
{
title:'aa',
bef:'11111111111111111111111111111111111111111'
bef:'11111111111111111111111111111111111111111'
},
{
title:'bb',
bef:'22222222222222222222222222222222222222222'
}
]
// 这⾥就是把绑定url⾥⾯的值来把序列号⾥⾯的值
let index = req.path1 // 第⼋步,从请求体中拿出来⼦路由
res.send(movie[index].title)// 第九步,通关⼦路由展⽰不同得内容
})
a.run(80,()=>{
console.log("服务器其启动");
})
实现简单{{}}语法
⾸先讲述⼀下正则的exec⽅法,匹配到的内容是再返回的结果中序列号第⼆个,并且执⾏⼀次匹配⼀次,再继续执⾏则往下⾯匹配
这⾥使⽤这个⽅法,其实和上⾯动态使⽤路由思路差不多,但是这⾥使⽤这个render函数代表输出。
这个render函数得作⽤就是匹配html⽂件⾥⾯使⽤ 类似 {{title}} 这样得参数,并且使⽤正则匹配,当匹配到{{}} 就根据⾥⾯得内容,就替换掉
let http =require('http')
let path =require('path')
let fs =require('fs')
class app {
constructor(){
console.log('进来');
this.server = ateServer()
this.objEvent ={}
('request',(req,res)=>{
let pathObj =path.parse(req.url)
let pathAll = pathObj.dir
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论