代码编织梦想

// 使用 node 内置的 http 模块创建 server 服务
const http = require('http')
const port = 2333

// 定义服务端实现的接口信息列表
const apiList = {
  '/api/getUserInfo': {
    method: 'get',
    data: {
      code: 0,
      data: {
        personId: '1024',
        personName: 'Tom'
      },
      msg: '收到了你的请求,这是一段响应的文本内容'
    }
  }
}

// 获取请求参数
const getRequestParams = (request, callback, paramsStr) => {
  let params = paramsStr ? {} : ''

  // get 请求的参数是拼接在 url 后面的
  if (paramsStr) {
    paramsStr.split('&').forEach(item => {  // 遍历封装
      const [key, value] = item.split('=')
      params[key] = value
    })
    callback(params)
    return
  }

  // post 请求的入参需要通过下面的方式获取到,通过拼接转换 buffer 数据流实现
  request.on('data', chunk => {
    params += chunk
  })
  request.on('end', () => {
    params = JSON.parse(params)
    callback(params)
  })
}

// 自动关闭服务器的定时器
let timer = null
const updateTimer = () => {
  timer && clearTimeout(timer)
  timer = setTimeout(() => {
    console.log('自动关闭服务器连接')
    server.close()
    timer = null
  }, 10000)
}

const server = http.createServer((request, response) => {
  const { url, method: reqMethod } = request
  console.log('http request message: ', url, reqMethod)
  const [path, paramsStr] = url.split('?')  // paramsStr 只会在 get 请求下存在
  const apiInfo = apiList[path]
  // 封装 response 数据
  const packResponse = (code = 404, apiInfo = {}, params = {}) => {
    console.log('request params: ', params) // 这里拿到请求参数后可以进行后续数据查询
    const data = apiInfo.data

    // 响应信息
    response.statusCode = code
    response.setHeader('Content-Type', 'application/json')
    response.end(JSON.stringify(data))
  }

  updateTimer()

  if (apiInfo) {  // 请求的 api 存在
    const { method } = apiInfo
    if (reqMethod === method.toUpperCase()) {  // 请求的 api 对应的请求方法正确
      getRequestParams(request, packResponse.bind(null, 200, apiInfo), paramsStr) // 获取请求参数
    } else {
      packResponse(405)
    }
  } else {
    packResponse()
  }
})

server.listen(port, () => {
  console.log(`服务器运行在 http://127.0.0.1:${port}/`)
  updateTimer()
})
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Mr_28/article/details/129673971

Node.js实战16:用http模块创建WEB服务器。-爱代码爱编程

Nodejs的http模块,是基于net.server,经过c++二次封装,也是nodejs的核心模块。 功能比net.server更强,可解析和操作更多细节内容,如值、content-length、请求方法、响应码状态等等,且使用更方便。 本文将介绍如何用http模块创建一个Web服务器,并再创建一个客户端对其发起访问。 服务器代码: var h

一步一步教你用Node实现完整的http服务端-爱代码爱编程

背景 今天没事看了之前写过的博客,发现搭建HTTP服务器的博客并不细致完整;也无任何路由处理,以及响应处理。秉着对读者和自己负责的态度,决定再写一个更新篇。本文章将以以下目录顺序去介绍: 文章目录 背景概述1. 网站的组成2. 超文本传输协议搭建服务端路由处理响应请求 为了便于新手理解,在开始之前,先来了解一下几个概念(老手可直接跳过)。 概

基于 Node.js 简易本地 http 服务-爱代码爱编程

基于Node.js的简易http服务器 Python的 http 模块可以直接开启一个简单的http服务器,平时用来测试很方便 python -m http.server 但是如此开启的服务器不支持post请求,因此照着文档使用node.js实现了一个,在Windows10下测试基本满足需要 Node.js 环境配置 由于对于node.js只是

node-http(简易说明)-爱代码爱编程

node中的http模块就是帮你创建编写服务器的 1. 创建核心模块 var http = require('http') 2. 创建web服务器 var server = http.createServer() 3. 注册request请求事件 // 当客户端请求过来,就会自动触发服务器的request请求事件, // 然后执行第二个参数

node后台使用express和mongodb搭建一个简易的后台接口-爱代码爱编程

新建一个nodejs+express+mongoose的简易后台接口 话不多说,上步骤: 1.安装node(自行百度) 2.安装mongo(自行百度或者去mongo官网下载) 3.安装完成这两个开发环境后,则可以新建项目文件了: 我们建立一个为my_express_project的项目文件夹: 然后用cmd进入该文件夹下:我的文件夹路径大概是这样: 当然

用原生NodeJS实现简易的静态web-爱代码爱编程

文章目录 前言一、routes.js引入模块getFileMime()方法static()方法二、app.js引入模块主体总结 前言 目的是实现form.ejs页面的数据能被接收并呈现,然后URL改变时页面能够正常跳转 URL中有扩展名的时候交给静态web解决, 没有扩展名交给路由解决 routes.js模块中封装了static()方法来确保

【JavaScript进阶学习】nodeJS内置模块-http(实现有静态资源响应和能处理前端发送的get和post数据的简易web服务器)-爱代码爱编程

创建服务对象:http.createServer((req,res)=>{...})挂载端口:对象.listen(端口号,)获取请求对象 获取前端请求的地址:获取前端发送数据的方式:if(req.method === "GET"){..}else if(req.method === "POST"){}绑定事件 数据:req.on("d

浅谈关于nodejs的http模块_阿山同学.的博客-爱代码爱编程

​ 关于nodejs的HTTP模块 node.js里面http模块属于后端的一个服务器模块 主要是接收请求,常用于接口的制作只不过过于繁琐,所以大部分都是选用更加方便的 express模块 express模块 安装http模块 npm i install http 创建简单的服务器 const http=require('http'); /

node.js精进(5)——http_u012804784的博客-爱代码爱编程

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统HTTP(HyperText Transfer Pro

node js 之web服务器搭建,续_艾提欧斯(aetios)(itoc)的博客-爱代码爱编程

本笔者之前发表了一篇关于如何通过Node JS运行环境运行express插件实现搭建简易的web服务器的文章 原文:node JS之web服务器搭建 今天,笔者本人用了点空闲时间,把之前开发的网站服务器插件,整理并上传至Gitee上,后期将上线至npm上,以供大家在 node JS 中方便安装使用。 npm上的插件名称是 website_expres

node.js实现简单的可跨域传数据的api(node的http模块搭建简易服务器和jsonp来完成)-爱代码爱编程

需要node的环境支持,因为服务器更新需要频繁关闭和开启 建议npm i -g nodemon 开启也是 nodemon 文件名 一、搭建一个简单的http服务器 const http=require("http")

语义化标签-爱代码爱编程

让标签有自己得含义 常见的语义化标签 <header></header>:定义在页眉 <nav></nav>:定义导航链接部分,一般用于页面中的主要连接,比如传统的导航条,侧边栏导航,页内导航,翻页操作等 <footer></footer>:定义在页尾 <asid

node的事件处理与node的全局变量,以及基于node的web编程模式_全局变量、事件最优处理-爱代码爱编程

目录 一、node的事件处理 1、node采用的事件驱动模式来进行事件处理的:只有当事件被触发时才执行相关程序 2、node是单线程运行的: 采用事件轮询方式,不断的查询事件队列中的消息,然后根据消息执行对应的回调函数​编辑 3、node事件机制中的三个角色 二、node的全局对象 1、全局变量 2、全局对象 三、node的readlin