博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20181204-http模块搭建静态资源服务器
阅读量:7040 次
发布时间:2019-06-28

本文共 3722 字,大约阅读时间需要 12 分钟。

http 内置模块,主要是用于http服务

  • server-text.js 返回一段文本
/*http.createServer((req,res)=>{}) 创建一个服务,传入一个监听函数req是可读流,res是可写流;res.end()调用res的end方法才能关闭流,返回响应res.setHeader('Content-Type','text/plain;charset=utf8') 设置响应头指定文件类型和编码server.listen(port)//开启服务在哪个端口*/let http = require('http');let port = 3000;let server = http.createServer((req,res)=>{
//监听函数,当http请求到来时会执行此函数。 //req 可读流,客户端传递过来的。 //res 可写流,服务器返回客户端。 //调用end,关闭可写流,才会结束响应把res返回到客户端 //res.write('你好');会乱码,因为没有指定编码 //res.end(); //设置响应头content-type,指定编码和文件类型,否则返回中文,会乱码。 res.setHeader('Content-Type','text/plain;charset=utf8') res.end('你好')})//服务器端口尽量使用3000+server.listen(port,()=>{ console.log(`${port} 服务启动`)})复制代码
  • server-html.js 返回一个html文件
let http = require('http')let fs= require('fs')let port = 3000;http.createServer((req,res)=>{    //响应头指定文件类型和编码,如果没有指定,浏览器可能也没有乱码因为html 
生命了编码 res.setHeader('Content-Type','text/html;charset=utf-8'); //通过读取文件的方式 fs.readFile('./index.html',(err,data)=>{ res.end(data) }) //通过流的方式读取文件 fs.createReadStream('./index.html').pipe(res);//pipe 方式内部自动调用了res.end).listen(3000,()=>{ console.log(`${port}服务启动`)}复制代码
  • server-url 根据请求req 的路径不同,返回不同内容(路由)
/*url内置模块,处理url路径,解析成对象,pathname 是路径,query是?后面的参数;第二个参数传 true,代表把query由a=1&b=2转换为{a:1,b:2}url.parse('www.baidu.com/a/index.html?a=1&b=2',true)=>{pathnam:'/a/index.html',quert:{a:1,b:2}} */let http = require('http');let port = 3000;let fs = require('fs');let path = require('path');//内置模块,处理url路径,解析成一个对象let url = require('url');// console.log(url.parse(//     'http://user:password@www.html5train.com/viewer.do?courseId=1445662#currentPlaying=3431074',true)// );//true 的作用 是将query "a=1&b=2"转换成一个对象http.createServer((req,res)=>{    //console.log(req.url)   //=> /index.html?a=1&b=2     let {pathname,query} = url.parse(req.url,true);//解析req.url,生成对象{pathname:'/index.html',query:{a:1,b:2}}        路由:根据不同路径返回不同结果    //1.如果访问的是文件,将文件读取返回    //2.如果访问的是文件夹,默认去找你这个文件夹的index.html    //3.不存在,返回404    fs.stat(`.${pathname}`,(err,stats)=>{        if(err){            res.statusCode = 404;            res.end(`${pathname} is not found`)            return;        }        //如果是文件        if(stats.isFile()){            //todo 没有写content-type头            fs.createReadStream('.${pathname}').pipe(res)        }        //如果是文件夹 ./也是文件夹        if(stats.isDirectory()){                    let p = path.join(`.${pathname}`,'./index.html');            fs.createReadStream(p).pipe(res)        }    })}).listen(port,()=>{    console.log(`${port} 服务开启`)})复制代码
  • server-mime.js 利用mime包设置cointent-type
let http = require('http');let port = 3000;let fs = require('fs');let path = require('path');let url = require('url');//let mime = {//    '.js':'application/javascript',//    '.css':'text/css',//    '.html':'text/html'//}let mime = require('mime');//npm install mime  利用第三方包处理mime类型http.createServer((req,res)=>{    let {pathname,query} = url.parse(req.url,true);    fs.stat(`.${pathname}`,(err,stats)=>{        if(err){            res.statusCode = 404;            res.end(`${pathname} is not found`)            return;        }        //如果是文件        if(stats.isFile()){            // let extName = pathname.match(/\.\w+$/)[0];            //res.setHeader('Content-Type',mime[extName]+';charset=utf-8')            res.setHeader('Content-Type',mime.getType(pathname)+';charset=utf-8')            fs.createReadStream('.${pathname}').pipe(res)        }        //如果是文件夹 ./也是文件夹        if(stats.isDirectory()){            res.setHeader('Content-Type','text/html;charset=utf-8')            let p = path.join(`.${pathname}`,'./index.html');            fs.createReadStream(p).pipe(res)        }    })}).listen(port,()=>{    console.log(`${port} 服务开启`)})复制代码

转载地址:http://axxal.baihongyu.com/

你可能感兴趣的文章
2014年值得关注的10个开源项目(下)
查看>>
oracle查看被锁的表和解锁
查看>>
实现主机、虚拟机、开发板的相互ping通
查看>>
linux基本命令
查看>>
IOS开发之UI中的其他小控件
查看>>
据说这些工具可以提高程序员的工作效率
查看>>
IT组织架构的变迁
查看>>
AlarmManager类的应用(实现闹钟功能)
查看>>
自定义实现Hadoop Key-Value
查看>>
Android的数据过滤机制
查看>>
CENTOS流水账0003.2[安装Rails]
查看>>
使用IDEA创建java WebApp(Maven)
查看>>
Hibernate上路_07-数据库乱码解决
查看>>
MySQL 中 localhost 与 127.0.0.1 的区别
查看>>
HTTP中的URL长度限制
查看>>
Python环境搭建、python项目以docker镜像方式部署到Linux
查看>>
玩了一下websocket
查看>>
javascript总结
查看>>
Springboot后台接收前端Date类型
查看>>
仿淘宝选择规格动画效果
查看>>