当前位置: 首页 > 工具软件 > node-mkv > 使用案例 >

用Node创建一个静态web服务器(读取文件)

司徒志
2023-12-01

创建服务器

  • 创建服务器的方法
    • http.cresteServer()
      //引入http模块
      const http = require('http');
      const { ESRCH } = require('constants');
      //创建web服务方法是http.creatServer(()=>()).listen(3000)
      
      http.createServer((req,res)=>{
         res.writeHead(200,{"Content-type":"text/html;charset='utf-8'"});
         res.write('<head><meta charset="UTF-8"></head>')
         res.write('内容')
         res.end()
      }).listen(3000)
      console.log('http://127.0.0.1:3000')
      
    • 以上这个只能给客户端响应简单的数据

NodeJs创建一个web服务器(可以放置静态网站、下载web服务器上的文件)

  • 代码(文件类型手动写死)
    //NodeJs创建一个web服务器(可以放置静态网站、下载web服务器上的文件)
    //http://127.0.0.1:3000/index.html
    // 1.获取网站地址
    const http = require('http')
    const fs = require('fs')
    const path = require('path')
    const url = require('url')
    const common = require('./module/name.js')
    http.createServer((req, res) => {
        // res.writeHead(200,{"Content-type":"text/html;charset='utf-8'"})
        //http://127.0.0.1:3000/index.html
        // 1.获取网站地址
        // let pathanme = req.url
        let pathanme = url.parse(req.url).pathname
        pathanme = pathanme == '/' ? '/index.html' : pathanme
        //path内置模块中有一个path.extname()方法获取后缀名
        let extanme = path.extname(pathanme)
        // console.log(extanme)
        //2. 通过fs模块读取文件
        if (pathanme != '/favicon.ico') {
            fs.readFile('./pack' + pathanme, (err, data) => {
                if (err) {
                    res.writeHead(404, { "Conten-type": 'text/html;charset="utf-8"' })
                    res.write('<head><meta charset="UTF-8"></head>')
                    res.end('页面不存在')
                } else {
                    let mime = common.getMime(extanme)
                    // res.writeHead(200,{"Conten-type":"text/html;charset='utf-8'"})
                    res.writeHead(200, { "Conten-type": '' + mime + ";charset='utf-8'" })
                    // res.write('<head><meta charset="UTF-8"></head>')
                    res.end(data)
                }
            })
        }
    }).listen(3000)
    console.log('http://127.0.0.1:3000')    
    
  • 自己定义的模块
    • module/name.js
    exports.getMime=function(e){
    	//e外部使用是传入的后缀名
        switch(e){
            case '.html':
                return 'text/html';
            case '.css':
                return 'text/css'
            case '.js':
                return 'text/javascript'
            default:
                return 'text/html';
        }
    }
    

- 创建web服务器(文件格式从json文件中读取)推荐(比较全面)(异步的方法)

  • 创建web服务器

    	//NodeJs创建一个web服务器(可以放置静态网站、下载web服务器上的文件)
    	//http://127.0.0.1:3000/index.html
    	// 1.获取网站地址
    	
    	const http = require('http')
    	const fs = require('fs')
    	const path = require('path')
    	const url = require('url')
    	const common = require('./module/name.js')
    	common.getMimes('.png')
    	http.createServer((req, res) => {
    	    // res.writeHead(200,{"Content-type":"text/html;charset='utf-8'"})
    	    //http://127.0.0.1:3000/index.html
    	    // 1.获取网站地址
    	    // let pathanme = req.url
    	    let pathanme = url.parse(req.url).pathname
    	    pathanme = pathanme == '/' ? '/index.html' : pathanme
    	    //path内置模块中有一个path.extname()方法获取后缀名
    	    let extanme = path.extname(pathanme)
    	    // console.log(extanme)
    	    //2. 通过fs模块读取文件
    	    if (pathanme != '/favicon.ico') {
    	        fs.readFile('./pack' + pathanme, async (err, data) => {
    	            if (err) {
    	                res.writeHead(404, { "Conten-type": 'text/html;charset="utf-8"' })
    	                res.write('<head><meta charset="UTF-8"></head>')
    	                res.end('页面不存在')
    	            } else {
    	                // let mime = common.getMime(extanme)
    	                let mimes = await common.getMimes(extanme)
    	                
    	                // res.writeHead(200,{"Conten-type":"text/html;charset='utf-8'"})
    	                res.writeHead(200, { "Conten-type": '' + mimes + ";charset='utf-8'" })
    	                // res.write('<head><meta charset="UTF-8"></head>')
    	                res.end(data)
    	            }
    	        })
    	    }
    	}).listen(3000)
    	console.log('http://127.0.0.1:3000')    
    
  • 外部自定义模块/module/name.js

    //异步的
    const fs = require('fs')
    exports.getMimes =  function (a) {
        return new Promise((resolve,reject)=>{
            fs.readFile('data/Mime.json',(err,data)=>{
                if(err){
                    console.log(err)
                    reject(err)
                }else{
                     let site =  JSON.parse(data.toString())
                //    return site[a] 这是异步的,如果直接返回会有问题的(需要做异步处理)
                    // console.log(site[a])
                    resolve(site[a])
                }
            })
        })
        
    }
    // console.log(this.getMimes('.js'))
    // this.getMimes('.js')
    
  • 外部文件类型库的json文件Mime.json

    {
    	    ".ai": "application/postscript                 ",
    	    ".eps": "application/postscript                 ",
    	    ".exe": "application/octet-stream               ",
    	    ".doc": "application/vnd.ms-word                ",
    	    ".xls": "application/vnd.ms-excel               ",
    	    ".ppt": "application/vnd.ms-powerpoint          ",
    	    ".pps": "application/vnd.ms-powerpoint          ",
    	    ".pdf": "application/pdf                        ",
    	    ".xml": "application/xml                        ",
    	    ".odt": "application/vnd.oasis.opendocument.text",
    	    ".swf": "application/x-shockwave-flash          ",
    	    ".gz": "application/x-gzip                     ",
    	    ".tgz": "application/x-gzip                     ",
    	    ".bz": "application/x-bzip2                    ",
    	    ".bz2": "application/x-bzip2                    ",
    	    ".tbz": "application/x-bzip2                    ",
    	    ".zip": "application/zip                        ",
    	    ".rar": "application/x-rar                      ",
    	    ".tar": "application/x-tar                      ",
    	    ".7z ": "application/x-7z-compressed            ",
    	    ".txt": "text/plain               ",
    	    ".php": "text/x-php               ",
    	    ".html": "text/html                ",
    	    ".htm": "text/html                ",
    	    ".js": "text/javascript          ",
    	    ".css": "text/css                 ",
    	    ".rtf": "text/rtf                 ",
    	    ".rtfd": "text/rtfd                ",
    	    ".py": "text/x-python            ",
    	    ".java": "text/x-java-source       ",
    	    ".rb": "text/x-ruby              ",
    	    ".sh": "text/x-shellscript       ",
    	    ".pl": "text/x-perl              ",
    	    ".sql": "text/x-sql               ",
    	    ".bmp": "image/x-ms-bmp           ",
    	    ".jp": "image/jpeg               ",
    	    ".jpeg": "image/jpeg               ",
    	    ".gif": "image/gif                ",
    	    ".png": "image/png                ",
    	    ".tif": "image/tiff               ",
    	    ".tiff": "image/tiff               ",
    	    ".tga": "mage/x-targa             ",
    	    ".psd": "image/vnd.adobe.photoshop",
    	    ".mp3": "audio/mpeg               ",
    	    ".mid": "audio/midi               ",
    	    ".ogg": "audio/ogg                ",
    	    ".mp4a": "audio/mp4                ",
    	    ".wav": "audio/wav                ",
    	    ".wma": "audio/x-ms-wma           ",
    	    ".avi": "video/x-msvideo          ",
    	    ".dv": "video/x-dv               ",
    	    ".mp4": "video/mp4                ",
    	    ".mpeg": "video/mpeg               ",
    	    ".mpg": "video/mpeg               ",
    	    ".mov": "video/quicktime          ",
    	    ".wm": "video/x-ms-wmv           ",
    	    ".flv": "video/x-flv              ",
    	    ".mkv": "video/x-matroska         " 	} 	
       ```
        
    

创建web服务器(文件格式从json文件中读取)推荐(比较全面)(同步的方法)

  • 和上面的唯一的区别是一个是上面是异步的(需要用到async await),这里是同步的

  • 创建web服务器
    //NodeJs创建一个web服务器(可以放置静态网站、下载web服务器上的文件)
    //http://127.0.0.1:3000/index.html
    // 1.获取网站地址
    
    const http = require('http')
    const fs = require('fs')
    const path = require('path')
    const url = require('url')
    const common = require('./module/name.js')
    common.getMimes('.png')
    http.createServer((req, res) => {
        // res.writeHead(200,{"Content-type":"text/html;charset='utf-8'"})
        //http://127.0.0.1:3000/index.html
        // 1.获取网站地址
        // let pathanme = req.url
        let pathanme = url.parse(req.url).pathname
        pathanme = pathanme == '/' ? '/index.html' : pathanme
        //path内置模块中有一个path.extname()方法获取后缀名
        let extanme = path.extname(pathanme)
        // console.log(extanme)
        //2. 通过fs模块读取文件
        if (pathanme != '/favicon.ico') {
            fs.readFile('./pack' + pathanme, (err, data) => {
                if (err) {
                    res.writeHead(404, { "Conten-type": 'text/html;charset="utf-8"' })
                    res.write('<head><meta charset="UTF-8"></head>')
                    res.end('页面不存在')
                } else {
                    // let mime = common.getMime(extanme)
                    let mimes =  common.getMimes(extanme)
                    
                    // res.writeHead(200,{"Conten-type":"text/html;charset='utf-8'"})
                    res.writeHead(200, { "Conten-type": '' + mimes + ";charset='utf-8'" })
                    // res.write('<head><meta charset="UTF-8"></head>')
                    res.end(data)
                }
            })
        }
    }).listen(3000)
    console.log('http://127.0.0.1:3000')
    
  • 外部自定义模块/module/name.js
    //同步
    const fs = require('fs')
    exports.getMimes = function (a) {
        var data = fs.readFileSync('./data/Mime.json');//同步方法
        let site = JSON.parse(data.toString())
        return site[a]
    }
    
 类似资料: