【Node.js工程师养成计划】之原生node开发web服务器

一、使用node创建http服务器

javascript 复制代码
var http = require('http');

// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {
   console.log('http://127.0.0.1:8080');
})

server.on('request', function(req, res){
   console.log('request');
   res.write('66666666888') // 响应数据
   res.end() // 断开服务器
})

二、服务器响应不同数据类型

javascript 复制代码
var http = require('http');

// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {
   console.log('http://127.0.0.1:8080');
})

server.on('request', function(req, res){
   console.log('request');
   res.setHeader('Content-type', 'text/plain;charset=utf-8')
   res.write('你好')
   res.end() // 断开服务器
})
javascript 复制代码
var http = require('http');

// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {
   console.log('http://127.0.0.1:8080');
})

server.on('request', function(req, res){
   console.log('request');
   // res.setHeader('Content-type', 'text/plain;charset=utf-8')
   res.setHeader('Content-type', 'text/html;charset=utf-8')
   res.write('<h1>你好</h1>')
   res.end() // 断开服务器
})
javascript 复制代码
var http = require('http');
var fs = require('fs')

// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {
   console.log('http://127.0.0.1:8080');
})

server.on('request', function(req, res){
   if (req.url == '/') {
      fs.readFile('./index.html', 'utf-8', function(err, data){
         res.write(data)
         res.end()
      })
   } else {
      fs.readFile('./aa.jpg', function(err, data){
         res.end(data)
      })
   }
   
})

三、http不同请求方法处理

javascript 复制代码
var http = require('http');
var fs = require('fs')
var url = require('url')

// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {
   console.log('http://127.0.0.1:8080');
})

server.on('request', function(req, res){
   console.log(11,req.method)
   if (req.method === 'GET') {
      console.log(url.parse(req.url, true).query.id)
      if (req.url == '/') {
         fs.readFile('./index.html', 'utf-8', function(err, data){
            res.write(data)
            res.end()
         })
      } else {
         fs.readFile('./aa.jpg', function(err, data){
            res.end(data)
         })
      }
   } else if (req.method === 'POST') {

   }
})

四、接收处理post消息数据

javascript 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <h1>你好啊 zm</h1>
  <img src="./aa.jpg" alt="" width="50" height="50">

  <div>
    <form action="./" method="post">
      <input type="text" name="username"> <br>
      <input type="text" name="age">
      <input type="submit" value="post提交">
    </form>
  </div>
</body>
</html>
javascript 复制代码
var http = require('http');
var fs = require('fs')
// var url = require('url')

// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {
   console.log('http://127.0.0.1:8080');
})

server.on('request', function(req, res){
   console.log('method:',req.method)
   if (req.method === 'GET') {
      // console.log(url.parse(req.url, true).query.id)
      if (req.url == '/') {
         fs.readFile('./index.html', 'utf-8', function(err, data){
            res.write(data)
            res.end()
         })
      } else {
         fs.readFile('./aa.jpg', function(err, data){
            res.end(data)
         })
      }
   } else if (req.method === 'POST') {
      // 请求体中
      var data = ''
      req.on('data', function(d){
         data+=d
         console.log(d)
      })
      req.on('end', function(){
         console.log(require('querystring').parse(data))
      })
   }
})

五、服务器代码模块拆分

server.js

javascript 复制代码
var http = require('http');
var fs = require('fs')
// var url = require('url')
var router = require('./router')

// 获取到服务器实例对象
var server = http.createServer()
server.listen(8080, function() {
   console.log('http://127.0.0.1:8080');
})

server.on('request', function(req, res){
   // console.log('request');
   // // res.setHeader('Content-type', 'text/plain;charset=utf-8')
   // res.setHeader('Content-type', 'text/html;charset=utf-8')
   // res.write('<h1>你好</h1>')
   // res.end() // 断开服务器

   console.log('method:',req.method)
   router(req, res)
})

router.js

javascript 复制代码
var fs = require('fs')
var controller = require('./controller')

module.exports = (req, res) => {
  if (req.method === 'GET') {
    // console.log(url.parse(req.url, true).query.id)
    if (req.url == '/') {
      controller.index(res)
    } else {
       fs.readFile('./aa.jpg', function(err, data){
          res.end(data)
       })
    }
 } else if (req.method === 'POST') {
    // 请求体中
    var data = ''
    req.on('data', function(d){
       data+=d
       console.log(d)
    })
    req.on('end', function(){
       controller.user(require('querystring').parse(data))
    })
 }
}

controller.js

javascript 复制代码
var fs = require('fs')

module.exports = {
  index(res){
    fs.readFile('./index.html', 'utf-8', function(err, data){
      res.write(data)
      res.end()
    })
  },

  user(postData, res){
    // 业务逻辑代码
    console.log(postData)
  }
}
相关推荐
ITHAOGE1528 分钟前
下载 | Windows Server 2025官方原版ISO映像!(4月更新、标准版、数据中心版、26100.32690)
服务器·windows·科技·微软·电脑
广州华水科技30 分钟前
单北斗GNSS变形监测系统在水利工程安全保障中的应用与优势分析
前端
yqcoder41 分钟前
CSS 外边距重叠(Margin Collapsing):现象、原理与完美解决方案
前端·css
Ether IC Verifier1 小时前
OSI网络七层协议详细介绍
服务器·网络·网络协议·计算机网络·php·dpu
山楂树の2 小时前
图像标注大坑:img图片 + Canvas 叠加标注,同步放大后标注位置偏移、对不齐?详解修复方案及亚像素处理原理
前端·css·学习·canva可画
本山德彪2 小时前
我做了一个拼豆图纸生成器,把照片秒变图纸
前端
_守一2 小时前
UE DS+Nakama进行游戏服务器开发(1)源码编译nakama
服务器·游戏
原来是猿2 小时前
【Socket编程预备知识】
linux·运维·服务器·网络
DTrader2 小时前
用TS无法实盘量化? - 实盘均线策略
前端·api
进击的夸父2 小时前
vfojs:Vue 超集架构,外壳React灵魂Vue
前端