美文网首页
使用node实现静态文件服务器,仿nginx 静态服务器

使用node实现静态文件服务器,仿nginx 静态服务器

作者: webmrxu | 来源:发表于2019-07-11 19:14 被阅读0次

原理:使用node http 模块 createServer 方法创建服务, fs 模块读取文件内容,net 模块判断处理端口被占情况。

let http = require("http")
let url = require("url")
let fs = require("fs")
let net = require('net')

// 默认端口,并检测端口是否被占用
let port = 8100
portIsOccupied(port).then(() => {
  createServerFn();
})

function createServerFn() {
  http.createServer(function (req, res) {
    let reqPath = url.parse(req.url).path
    let filepath = __dirname + reqPath
    fs.exists(filepath, function (exists) {
      if (exists) {
        fs.stat(filepath, function (err, stats) {
          if (err) {
            res.end('<h1>server error</h1><p>' + err + '</p>')
          } else {
            if (stats.isFile()) {
              let file = fs.createReadStream(filepath)
              console.log(filepath.replace(/\\/g, '/'))
              file.pipe(res)
            } else {
              fs.readdir(filepath, function (err, files) {
                if (files.includes('index.html')) {
                  filepath = filepath + '/index.html'
                  let file = fs.createReadStream(filepath)
                  console.log(filepath.replace(/\\/g, '/'))
                  file.pipe(res)
                } else {
                  res.end('<h1>404 no such file or directory</h1><p>no such file or directory</p><p>' + filepath + '/index.html</p>')
                }
              })
            }
          }
        })
      } else {
        res.end('<h1>404 no such file or directory</h1><p>no such file or directory</p><p>' + filepath + '</p>')
      }
    })
  }).listen(port)
  console.log('http.createServer is start, port ' + port)
}
// 检测端口是否被占用
function portIsOccupied() {
  const server = net.createServer().listen(port)
  return new Promise((resolve, reject) => {
    server.on('listening', () => {
      server.close()
      resolve()
    })
    server.on('error', (err) => {
      if (err.code === 'EADDRINUSE') {
        port++
        resolve(portIsOccupied())
      } else {
        reject(err)
      }
    })
  })
}

相关文章

  • java Socket 实现多线程静态文件服务器

    关于静态文件服务器,我觉得博文共赏:Node.js静态文件服务器实战写的不错,简单易懂,思路清晰,不过使用Node...

  • 使用node实现静态文件服务器,仿nginx 静态服务器

    原理:使用node http 模块 createServer 方法创建服务, fs 模块读取文件内容,net 模块...

  • Nginx静态服务配置---详解root和alias指令

    静态文件 Nginx以其高性能著称,常用与做前端反向代理服务器。同时nginx也是一个高性能的静态文件服务器。通常...

  • nginx部署前端页面

    关于nginx 现在很多网站都是使用 nginx当静态文件服务器和反向代理服务器从维基百科上摘两段话吧 Nginx...

  • Nginx配置虚拟主机

    标签(空格分隔): nginx 1 新增域名为 $host 静态文件服务器 1.1 打开 Nginx 配置文件 /...

  • java完成ftp传输(将文件上传至静态资源服务器)

    Nginx实现静态资源服务器 apache实现静态资源服务器 参考文章记录 JavaWeb静态资源分离思路 jav...

  • nginx实现高可用

    大家知道NGINX作为反向代理服务器可以实现负载均衡,同时也可以作为静态文件服务器,它的特点就是并发支持大,单机可...

  • flask

    如何使用flask做vue的静态文件服务器? 原理: 让flask的静态文件与模板文件的根目录指向vue的静态文件...

  • Nginx笔记

    基本使用 添加一个静态文件服务器, 并以目录方式呈现

  • nginx常见技巧

    nginx常见技巧 nginx的用途 一款轻量级的服务器,于前端而言,可以做静态文件服务器,很方便。于后端而言,可...

网友评论

      本文标题:使用node实现静态文件服务器,仿nginx 静态服务器

      本文链接:https://www.haomeiwen.com/subject/scdfkctx.html