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

news2024/11/26 23:48:47

在这里插入图片描述

一、使用node创建http服务器

在这里插入图片描述

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() // 断开服务器
})

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

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() // 断开服务器
})

在这里插入图片描述

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() // 断开服务器
})

在这里插入图片描述

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不同请求方法处理

在这里插入图片描述

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消息数据

<!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>
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

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

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

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)
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1631770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VitePress 构建的博客如何部署到 github 平台?

VitePress 构建的博客如何部署到 github 平台&#xff1f; 1. 新建 github 项目 2. 构建 VitePress 项目 2.1. 设置 config 中的 base 由于我们的项目名称为 vite-press-demo&#xff0c;所以我们把 base 设置为 /vite-press-demo/&#xff0c;需注意前后 / export default…

【数据结构与算法(C语言)】1. 线性表的顺序存储

文章目录 前言一. 线性表插入和删除1. 元素的插入2. 元素的删除 二. 代码三. 优缺点 前言 线性表的顺序存储结构&#xff0c;指的是用一段地址连续的存储单元依次存储线性表的数据结构 一. 线性表插入和删除 1. 元素的插入 插入位置之后的数据都向后移一位&#xff0c;上图中元…

chrome 安装devtools

chrome 安装devtools 下载安装 链接&#xff1a;https://github.com/vuejs/devtools 选择对应版本&#xff1a; 安装yarn 下载 npm install -g yarn --registryhttps://registry.npmmirror.com进入下载的目录安装依赖 yarn install --registryhttps://registry.npmmirror.…

ASP.NET汽车销售管理系统的设计与开发

摘 要 随着人们生活水平的不断提高&#xff0c;人们对汽车的消费和需求也越来越旺盛。很多汽车销售公司的业务环节仍然运用人工记账的传统方法&#xff0c;既容易出错又会导致账目混乱&#xff0c;查询和统计起来也非常不方便&#xff0c;费时又费力&#xff0c;严重时会给公…

stm32单片机开发二、定时器-内部时钟中断和外部时钟中断、编码器

定时器本质就是一个计数器 案例&#xff1a;定时器定时中断 内部时钟中断 Timer_Init(); //定时中断初始化 /*** 函 数&#xff1a;定时中断初始化* 参 数&#xff1a;无* 返 回 值&#xff1a;无*/ void Timer_Init(void) {/*开启时钟*/RCC_APB1PeriphClockCmd(RCC…

CSS-复合选择器

作用&#xff1a; 后代选择器&#xff1a; 子代选择器 并集选择器 用逗号隔开&#xff0c;在style里面写的时候&#xff0c;每一个标签空一行。 <title>Document</title><style>p,div,span{color: aqua;}</style> </head> <body><p>…

在Linux操作系统中关于磁盘(硬盘)管理的操作

电脑中数据存储设备&#xff1a;硬盘&#xff08;实现数据的持久化存储&#xff09;&#xff0c;内存 在Linux操作系统中一切皆文件的思想&#xff0c;所有的设备在Linux操作系统中都是通过文件来标识的&#xff0c;所以每一个硬盘都对应一个块设备文件。 在Linux操作系统中所…

Golang | Leetcode Golang题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; // 贪心算法 func canJump(nums []int) bool {cover : 0n : len(nums)-1for i : 0; i < cover; i { // 每次与覆盖值比较cover max(inums[i], cover) //每走一步都将 cover 更新为最大值if cover > n {return true}}return false } …

YOLov5 + Gradio搭建简单的Web GUI

写在前面&#xff1a;当我们将模型训练出来了&#xff0c;此时就需要做UI界面给别人展示了。python提供的Gradio可以快速的搭建web页面。生成本地网址和公网网址&#xff0c;方面自己测试和用户测试。 一、安装 Gradio介绍 Gradio是一个开源的python库&#xff0c;用于构建机…

深度学习模型Deep Learning Model

什么是深度学习&#xff1f;&#xff1f; 深度学习模型是一种基于人工神经网络&#xff08;Artificial Neural Networks, ANN&#xff09;的机器学习模型&#xff0c;其核心思想是通过多层次的神经网络结构来学习数据的特征表示和模式。这些模型通常由多个层次&#xff08;深度…

WPS的JS宏如何设置Word文档的表格的单元格文字重新编号

希望对Word文档中的表格进行统一处理&#xff0c;表格内的编号&#xff0c;有时候会出现紊乱&#xff0c;下一个表格的编号承接了上一个表格的编号&#xff0c;实际需要重新编号。 当表格比较多时&#xff0c;手动更改非常麻烦&#xff0c;而且更改一遍并不能完成&#xff0c;…

测算sample gpt

测算代码 import pandas as pd import matplotlib.pyplot as pltlosspd.read_pickle("loss_8.pkl") plt.plot(loss) losspd.read_pickle("loss_16.pkl") plt.plot(loss) losspd.read_pickle("loss_4_8.pkl") plt.plot(loss) losspd.read_pickle(…

第5篇:创建Nios II工程之Hello_World<四>

Q&#xff1a;最后我们在DE2-115开发板上演示运行Hello_World程序。 A&#xff1a;先烧录编译Quartus硬件工程时生成的.sof文件&#xff0c;在FPGA上成功配置Nios II系统&#xff1b;然后在Nios II Eclipse窗口右键点击工程名hello_world&#xff0c;选择Run As-->Nios II …

低代码+定制物资管理:创新解决方案探析

引言 在当今快速变化的商业环境中&#xff0c;企业面临着不断增长的挑战&#xff0c;如提高效率、降低成本、满足客户需求等。为了应对这些挑战&#xff0c;企业需要不断创新并采用先进的技术解决方案。在这样的背景下&#xff0c;低代码开发和定制化物资管理成为了引领企业变…

03.Kafka 基本使用

Kafka 提供了一系列脚本用于命令行来操作 kafka。 1 Topic 操作 1.1 创建 Topic 创建一个名为 oldersix-topic 的 topic&#xff0c;副本数设置为3&#xff0c;分区数设置为2&#xff1a; bin/kafka-topics.sh \ --create \ --zookeeper 192.168.31.162:2181 \ --replication…

Blender曲线操作

1.几种常见建模方式 -多边形建模&#xff1a;Blender&#xff0c;C4D&#xff0c;3DsMax&#xff0c;MaYa -曲线&#xff1a; -曲面&#xff1a;Rhino&#xff08;Nurbs&#xff09; -雕刻&#xff1a;Blender&#xff0c;ZBrush -蜡笔&#xff1a;Blender 1&#xff09;新…

编译报错 - Missing trailing comma comma-dangle or Missing semicolon semi

一、comma-dangle规则&#xff1a; 这种错误通常出现在使用代码格式检查工具&#xff08;如ESLint&#xff09;时&#xff0c;具体是在JSON或者JavaScript对象、数组的最后一个元素后面缺少了逗号&#xff08;trailing comma&#xff09;。在某些编码标准中&#xff0c;要求在…

spring cloud eureka 初始化报错(A bean with that name has already been defined)

报错内容 The bean ‘eurekaRegistration’, defined in class path resource [org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration E u r e k a C l i e n t C o n f i g u r a t i o n . c l a s s ] , c o u l d n o t b e r e g i s t e r e d . A …

MySQL:飞腾2000+Centos7.6 aarch64 部署MySQL8.0.36

目录 1.硬件环境 2.MySQL选择 Bundle版本【全部文件】​编辑 3.下载并安装 4.安装完成后检查mysql 5.初始化MySQL 6.那就问了&#xff0c;都初始化了啥&#xff1f; 7.尝试启动MySQL 8.给mysql文件授权 9.再次尝试启动正常 10.mysql初始化目录出现了mysql.sock 11.找…

MATLAB可视化图形绘制详解

图形常见的修饰命令 ①曲线修饰 曲线修饰包括曲线的顔色、线型和标示符号的设置。曲线修饰的命令格式如下。 plot(x,y,option):option定义了曲线的颜色、线型和标示符号。 MATLAB曲线修饰的各种选项见表 举例&#xff1a; x-2*pi:pi/50:2*pi; y1x.^2;y2cos(2*X);y3y1.*y2…