首页 > 编程语言 >Node.js+Express+Koa2开发接口学习笔记(一)

Node.js+Express+Koa2开发接口学习笔记(一)

时间:2023-09-09 19:34:07浏览次数:55  
标签:Node req const 请求 res Express js http server

http请求概述

  • 浏览器输入一个地址后,进行DNS解析(通过域名查找对应的IP地址),与server建立TCP连接(进行三次握手),发送http请求
  • server接收到http请求,处理,并返回
  • 客户端(这里指浏览器)接收到返回数据,处理数据(如渲染页面,执行js)

客户端与服务器的三次握手大致可以理解为:

第一次握手:客户端询问服务器是否可以使用;

第二次握手:服务器告诉服务器自己可以使用;

第三次握手:客户端再次告诉服务器:收到回应,即将访问本服务器

简单创建server

创建文件express-koa-learning => index.js

// 通过require获取nodejs原生提供的http模块
const http = require("http");
// 使用http.createServe() 方法创建Web服务器,返回一个Server 的实例对象。
const server = http.createServer((req, res) => {
  res.end("hello world");
});
// 监听本地端口
server.listen(8000);
// 然后浏览器访问 http://localhost:8000

在控制台输入命令 node index.js,然后浏览器访问 http://localhost:8000

代码中createServer有2个参数,req就是客户端发送给server的请求信息request,res就是服务器给客户端返回的响应数据response。

处理get请求

  • get请求,即客户端要向server端获取数据,如查询博客列表
  • 通过querystring来传递数据,如a.html?a=100&b=200
  • 浏览器直接访问,就发送get请求

前面提到req是客户端发送给server的请求信息,我们可以从req中获取到客户端请求的url。

我们可以借助querystring将url中的请求参数转为js中的对象,方便我们使用。

// 通过require获取nodejs原生提供的http模块
const http = require("http");
// 通过require获取nodejs原生提供的querystring模块
const querystring = require("querystring");
// 使用http.createServe() 方法创建Web 服务器,  返回一个Server 的实例对象。
const server = http.createServer((req, res) => {
  console.log('method',req.method); // 获取请求的方法 输出:GET
  const url = req.url; // 获取请求的完整url
  console.log('url',req.url)
  req.query = querystring.parse(url.split("?")[1]); // 解析querystring
  console.log('query',req.query)
  //  req就是客户端发送过来的东西,res就是服务器给客户端返回的东西
  //  res.end("hello world");
  res.end(JSON.stringify(req.query)); // 将querystring返回
});
// 监听本地端口
server.listen(8000);
// 然后浏览器访问 http://localhost:8000

PS:每次修改代码后都需要重新执行命令:node index.js,在浏览器输入http://localhost:8000/?id=123456&name=zzz

可以看到控制台结果以及浏览器的页面显示了server返回的数据{"id":"123456","name":"zzz"}

pP6fr34.png

处理post请求

  • post请求,即客户端要像服务端传递数据,如新建博客
  • 通过post data传递数据
  • 浏览器无法直接模拟,需要手写js,或者使用postman
const http = require("http");

const server = http.createServer((req, res) => {
  if (req.method == "POST") {
    // 数据格式
    console.log("content-type", req.headers["content-type"]);
    // 接收数据
    let postData = "";
    req.on("data", (chunk) => {
      postData += chunk.toString();
    });
    req.on("end", () => {
      console.log(postData);
      res.end("hello world"); // 在这里返回,因为是异步
    });
  }
});

server.listen(8000);

运行服务端,打开Postman或者Apifox进行POST请求。

pPckEoq.png

pPckAwn.png

处理http请求的综合实例

const http = require("http");
const querystring = require("querystring");

const server = http.createServer((req, res) => {
  const method = req.method; //获取请求方法
  const url = req.url; //获取请求路由
  const path = url.split("?")[0]; 
  const query = querystring.parse(url.split("?")[1]);//解析路由

  // 设置返回数据的格式为 JSON
  res.setHeader("Content-type", "application/json");

  // 返回的数据
  const resData = {
    method,
    url,
    path,
    query,
  };
  // 返回
  if (method === "GET") {
    res.end(JSON.stringify(resData)); // res.end只能返回二进制或者字符串
  }
  if (method === "POST") {
    let postData = "";
    req.on("data", (chunk) => {
      postData += chunk.toString();
    });
    req.on("end", () => {
      resData.postData = postData;
      res.end(JSON.stringify(resData)); // res.end只能返回二进制或者字符串
    });
  }
});

// 监听本地端口
server.listen(8000);

运行服务端,打开Postman或者Apifox进行HTTP请求,返回客户端向服务器发送的请求数据,例如请求方法、请求路由等。

请求GET接口:http://localhost:8000/api/blog/update?id=1

pPcAK4P.png

请求POST接口:http://localhost:8000/api/blog/update?id=1,并且发送数据

pPcAGuQ.png

标签:Node,req,const,请求,res,Express,js,http,server
From: https://www.cnblogs.com/Small-Windmill/p/17690033.html

相关文章

  • 什么是 Angular 应用 angular.json 中的 assets 数组
    在Angular项目中,angular.json是一个非常重要的配置文件,用于定义和管理项目的各种设置和构建选项。其中,assets数组是angular.json中的一个关键配置项,用于指定需要在构建后包含在应用程序中的静态资源文件和文件夹。在本文中,我将解释什么是assets数组,并提供详细示例来说明如何使用它......
  • Android中使用GSON解析JSON数据
    Android中使用GSON解析JSON数据,以下为java代码。我这个是Unity项目打包出来的android工程,工程里自带有gson的库,所以能直接用了。publicvoidStringToJsonByGson(Stringjson){Gsongs=newGson();Model1model=gs.fromJson(json,Model1.class......
  • js json用法 转json字符串 json对象( 重点看最后)
    jsjson:JSON.parse() //转为json对象。JSON.stringify() //转为JSON字符串。举例:<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>jsjson举例</title></head><body><pid="demo"></p&g......
  • 【js】【统计次数】静态页面访问次数 js页面请求次数统计
    ​效果: 源码:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>静态页面访问量统计</title></head><body><scripttype="text/javascript">varpgcoun......
  • vue.js:响应式布局([email protected])
    一,代码:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859<template>  <divclass="hello">    <div>页......
  • 针对JavaScript混淆加密,JShaman推出新功能
    JShaman英文版在最新的一次更新时,增加了新功能:JavaScript代码混淆加密完成后,可以显示各功能耗时、处理的AST节点数量,以此可知对代码做了哪些保护处理。如上图所示,在此例中,对代码共进行了23项混淆加密,JSON数据加密8350处、字符串加密189669处、15222次平展控制流、30722处变量名修改......
  • web前端技能方法总结(css、js、jquery、html)(2)
    创建链接块display:block;列表样式在一个无序列表中,列表项的标志(marker)是出现在各列表项旁边的圆点。在有序列表中,标志可能是字母、数字或另外某种计数体系中的一个符号。要修改用于列表项的标志类型,可以使用属性list-style-type:ul{list-style-type:square;}1上面的声明把......
  • JS基础-分支语句
    分支语句是流程控制语句当中的一种可以简单理解为是一种控制条件,当达到某个条件时,执行相应的代码IFIF多条件分支例如:当变量a>b时,则执行语句块1,如果a等于b时,则执行语句块2;最后,如果a>b时,则执行语句块3ifelse语句当中的语句块一般具有排斥作用。如果执行了......
  • 修改 node 默认的全局模块安装 global 路径和 cache 路径
    修改node默认的全局模块安装global路径和cache路径安装node后,全局模块的global路径和cache路径默认安装在C:\Users\{{账号}}\AppData\Roaming下,在这个目录下面会找到npm文件夹和npm_cache的文件夹。在其他的盘符建立node_global文件夹和node_cache文......
  • 输入jps命令发现缺少namenode进程--同时猜想hive启动失败是由于缺少namenode进程的原
    问题描述且问题解决杀死9000端口:kill-99000然后查看9000端口的进程是否还在:netstat-anp|grep9000然后尝试再次开启hadoop集群:再尝试开启hive服务:问题解决!......