【Node.js】 创建web服务器

news2024/11/18 2:37:02

Node.js

          • 什么是客户端,什么是服务器
          • 服务器和普通电脑的区别
          • 什么是http模块
          • 导入http模块
          • 服务器相关概念
          • 创建web服务器的基本步骤
          • req请求对象
          • req响应对象
          • 解决中文乱码
          • 根据不同的url响应不同的html内容

什么是客户端,什么是服务器
  • 客户端
  • 在网络节点中,负责消费资源的电脑叫做客户端
  • 服务器
  • 负责对外提供网络资源的电脑,叫做服务器
服务器和普通电脑的区别
  • 服务器上安装了web服务软件,例如:IIS,Apache等,通过安装这些服务器软件(外网服务器),就把普通电脑变成web服务器了
  • 在node.js中,我们不需要使用第三方外网服务器软件,因为我们可以基于node.js提供的http模块,通过几行代码手写一个服务器,从而对外提供web服务
什么是http模块
  • http模块是Node.js官方提供的,用来创建web服务器的模块
  • 通过http模块提供的http.createServer()方法,就能方便的把一台普通的电脑,变成一台web服务器,从而对外提供web资源服务
导入http模块
const http = require('http')
服务器相关概念
  • IP地址,就是互联网上每台计算机的唯一地址,IP地址具有唯一性
  • 域名地址,因为IP地址是一长串数字,不便于记忆,于是人们使用另一套字符型的地址方案,即域名地址
  • DNS域名服务器,IP地址和域名是一一对应的关系,这个关系存放在DNS域名服务器的电脑中,可以实现之间的转化
  • 例如:127.0.0.1对应的域名是localhost
  • 端口号,类似现实生活中的门牌号,一台电脑运行n个web服务,每个服务对应唯一一个端口号,客户端发送的请求,通过端口号,可以准确的交给对应的web服务进行处理
  • (每个端口号只能被一个web服务占用)(实际应用中,url的80端口可以被省略)
创建web服务器的基本步骤
//步骤一:导入http模块
const http = require('http')
//步骤二:创建web服务器实例
const server= http.createServer()
//步骤一:为服务器实例绑定reqest事件,监听客户端的请求
server.on('request',(req,res)=>{ //参数一是事件的名称,参数二是触发事件的回调
	//只要有客户端请求我们服务器,就会触发reqest事件,从而调用这个事件处理函数
	console.log("请求了!")
})
//步骤四:启动服务器
server.listen(80,()=>{ //参数一是端口号,让服务器运作在80端口处,参数二,请求成功的回调
	console.log("启动成功")
})
//运行时,cmd运行node 文件名
//vscode运行,终端-新建终端-

请添加图片描述

  • 运行如果报错,别慌,只是你现在用的端口被占用了
    在这里插入图片描述
req请求对象
  • 只要服务器接收到了客户端的请求,就会调用server.on()为服务器绑定的reqest事件处理函数
  • 如果想在事件处理函数中,处理与客户端相关的数据或属性,可以使用下面方法
server.on('request',(req)=>{ //参数一是事件的名称,参数二是触发事件的回调
	//req是请求对象,它包含了与客户端相关的数据和属性
	//req.url是客户端请求的URl地址
	//req。mrthod是客户端的method请求类型
	console.log("请求了!")
})
//点击下方地址就可请求
server.listen(80, () => { //参数一是端口号,让服务器运作在80端口处,参数二,请求成功的回调
    console.log("启动成功http://127.0.0.1")
})
req响应对象
  • 在服务器的reqest事件处理函数中,如果想访问与服务器相关的数据或属性
server.on('request',(req,res)=>{ //参数一是事件的名称,参数二是触发事件的回调
	//res是响应对象,它包含了与服务端相关的数据和属性
	//要发送到客户端的字符串
	const str ="想发送的字符串"
	//res.end()方法的作用
	//向客户端发送指定的内容,并结束这次请求
	res.end(str)
})
解决中文乱码
  • 当调用res.end方法时候,向客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式
  • 需要设置响应头
    请添加图片描述
server.on('request',(req,res)=>{ 
	//要发送到客户端的字符串
	const str ="想发送的字符串"
	res.setHeader('Content-Type','text/html;charset=UTF-8')
	//res.end()方法的作用
	res.end(str)
})

请添加图片描述

根据不同的url响应不同的html内容
  • 获取请求的url地址
  • 设置默认的响应内容为404 Not found
  • 判断用户的请求是否为想要的页面
  • 设置Contant-Type响应头,防止中文乱码
  • 使用res.end()把内容响应给客户端
server.on('request', (req, res) => {
 const url = res.url
    let content = "<h1>404 Not found</h1>"
    if(url==='/'||url==='/index/html'){
        content ="<h1>首页</h1>"
    }else{
        content ="<h1>编程</h1>"
    }
    res.setHeader('Content-Type','text/html;charset=UTF-8')
    res.end(content)
})
server.listen(80, () => { //点击链接进行请求
    console.log("启动成功http://127.0.0.1")
})

请添加图片描述

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

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

相关文章

CentOS7 配置共享文件夹

1、SSH连接CentOS&#xff0c;使用“rpm -qi samba"命令查询是否已经安装了Samba&#xff0c;如果没有安装&#xff0c;使用“yum install samba”命令&#xff0c;下载Samba包并安装&#xff0c;输入“y”&#xff0c;确认安装软件和软件依赖包。 2、使用“rpm -qa | gr…

kubernetes -- 核心组件介绍以及组件的运行流程

常用组件大白话说 如果想要官方的&#xff0c;详细的信息&#xff0c;请看官方文档。 https://kubernetes.io/zh-cn/docs/concepts/overview/components/ 现在介绍一些核心的概念&#xff1a; etcd&#xff1a;存储所有节点的信息&#xff0c;节点上部署的容器信息等都存在数…

SWIG妙用: MATLAB程序转python和Java库

1.引言Python或Java调用MATLAB程序需要安装MATLAB官方提供的支持库&#xff08;MATLAB Runtime&#xff09;&#xff0c;而且适配的python或JDK版本有限&#xff0c;不方便移植。本文的思路是用MATLAB Coder将MATLAB源程序转为C/C代码&#xff0c;然后用swig将其打包成python 动…

Spring Cloud Alibaba Sentinel 动态规则扩展

前言 到目前为止&#xff0c;我们的规则定义是这样的&#xff1a; PostConstructpublic void initRole(){List<FlowRule> rules new ArrayList<>(1);FlowRule rule new FlowRule();// 设置规则匹配的资源名称rule.setResource("myFlowResource");// 规…

基于云原生分布式存储ceph实现k8s数据持久化

文章目录1、初始化集群1.1 集群机器配置1.2 配置主机名1.3 配置hosts文件1.4、配置互信1.5、关闭防火墙1.6、关闭selinux1.7、配置Ceph安装源1.8、配置时间同步1.9、安装基础软件包2、安装ceph集群2.1 安装ceph-deploy2.2 创建monitor节点2.3 安装ceph-monitor2.4 部署osd服务2…

Springboot毕业生生活用品出售网站系统-java ssm

(a) 管理员&#xff1b;管理员进入系统主要功能包括个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;用品分类管理&#xff0c;用品信息管理&#xff0c;系统管理&#xff0c;订单管理等功能并进行操作。 (b) 商家&#xff1b;商家进入系统主要功能包括个人中心&…

2004-2019年285个地级市实际GDP与名义GDP

2004-2019年285个地级市实际GDP和名义GDP 1、时间&#xff1a;2004-2019年 2、范围&#xff1a;285个地级市 3、说明&#xff1a;GDP平减指数采用地级市所在省份当年平减指数 4、代码&#xff1a; "gen rgdp gdp if year 2003 gen rgdp gdp if year 2003" re…

Java集合面试题:HashMap源码分析

文章目录一、HashMap源码二、HashMap数据结构模型图三、HashMap中如何确定元素位置四、关于equals与hashCode函数的重写五、阅读源码基本属性参考文章&#xff1a;史上最详细的 JDK 1.8 HashMap 源码解析参考文章&#xff1a;Hash详解参考文章&#xff1a;hashCode源码分析参考…

elasticsearch映射及字段类型

查询映射关系类型上对字段的类型进行映射&#xff0c;我们前面知道可以通过get方法请求_mapping查询指定类型的映射关系&#xff1a;此语句可以查询get-together索引下的group类型的映射关系更新映射关系使用put方法可以更新类型的映射这里指定了new-events类型的字段映射关系&…

【C语言】qsort——回调函数

目录 1.回调函数 2.qsort函数 //整形数组排序 //结构体排序 3.模拟实现qsort //整型数组排序 //结构体排序 1.回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来…

基础篇——如何在HTML元素中设置CSS样式

CSS Id 和 Class选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置"id" 和 "class"选择器。 id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。 HTML元素以id属性来设置id选择器,CSS 中 id 选择器以 "#" 来定义…

四、Java框架之SpringMVC2_SSM整合

黑马课程 文章目录1. SSM整合案例1.1 创建web项目&#xff0c;并导入坐标1.2 完整的配置类SpringConfigJdbcConfigMyBatisConfigSpringMvcConfigSpringMvcSupportServletConfig1.3 创建数据库及表1.4 编写功能模块domain包dao包service包controller包1.5 接口测试2. 表现层与前…

XSS跨站脚本攻击剖析与防御:初识XSS

目录 跨站脚本介绍 1. 什么是XSS跨站脚本 2. XSS跨站脚本实例 3. XSS漏洞的危害 XSS的分类 1. 反射型XSS 2. 持久性XSS XSS构造 1. 利用< >标记注射Html /Javascript 2. 利用HTML标签属性值执行XSS 3. 空格回车Tab 4. 对标签属性值转码 5. 产生自己的事件…

PorterDuffXfermode与圆角图片

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 圆角图片 在项目开发中&#xff0c;我们常用到这样的功能&#xff1a;显示圆角图片。 这个是咋做的呢&#xff1f;我们来瞅瞅其中一种实现方式 /*** param bitmap 原图* p…

ChatGPT的注册与使用方法

ChatGPT无疑是最近最火的一个大模型AI应用,当艺术家还在跟AI争论AI绘画的问题时,NLP领域中的ChatGPT大模型应用,仿佛一下子替代了AI绘画应用,成为了最新争论的话题。最近也看到很多人在讨论ChatGPT,当然,很多人就算不是人工智能领域的也开始讨论ChatGPT,可见ChatGPT的风…

代替swagger的api接口神器

自动化API文档-APIFOX 文章作者&#xff1a;老杨 一&#xff1a;概述 大家在后端开发开发过程中&#xff0c;最痛恨的两天事情&#xff1a;1.写文档&#xff0c;2.别人不写文档。而我们后端开发&#xff0c;必定经历的事情就是要和前端&测试对接&#xff0c;我们需要把我…

vue104-123

影院组件 更改滚动条范围&#xff1a; 动态结算高度 //动态结算高度 this.height document.documentElement.clientHeight-选项卡高度this.height document.documentElement.clientHeight- document.querySelector(footer).offsetHeight px组件库elementUI 网址elementUI…

Docker Compose编排

一、概念1、Docker Compose是什么Docker Compose的前身是Fig&#xff0c;它是一个定义及运行多个Docker容器的工具通过 Compose&#xff0c;不需要使用shell脚本来启动容器&#xff0c;而使用 YAML 文件来配置应用程序需要的所有服务然后使用一个命令&#xff0c;根据 YAML 的文…

Spring Boot课程评价管理系统

文章目录主要功能截图&#xff1a;主要代码展示数据库设计设计总结项目地址&#x1f345; 作者主页&#xff1a;Java韩立 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、【java韩立】公号作者✌ 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 …

handler解析(2) -Handler源码解析

目录 基础了解&#xff1a; 相关概念解释 整体流程图&#xff1a; 源码解析 Looper 总结&#xff1a; sendMessage 总结&#xff1a; ThreadLocal 基础了解&#xff1a; Handler是一套 Android 消息传递机制,主要用于线程间通信。实际上handler其实就是主线程在起了一…