nodejs中http模块开发(代码片段)

还是不会呀 还是不会呀     2023-01-07     402

关键词:

web服务器初体验

两种创建方式

const http = require("http");
// 创建方式一 http.createServer
const server1 = http.createServer((request, response) => 
  response.end("hello server1");
);
// 设置监听端口
server1.listen(8080, "0.0.0.0", () => 
  console.log("服务器开启成功~");
);
// 创建方式二 http.Server类
const server2 = new http.Server((request, response) => 
  response.end("hello server2");
);

server2.listen(8081, "0.0.0.0", () => 
  console.log("服务器开启成功~");
);

浏览器请求效果

其他补充

// server方式可以不传端口和主机host
server.listen(() => 
  console.log(server.address().port);// 获取默认设置的端口
);

request对象

method的处理

根据Restful风格,增删给查对应不同得请求方式

  • GET:查询数据
  • POST:新增数据
  • PATCH:修改数据
  • DELETE:删除数据
// 不同的请求方式打印结果不同 可能结果 GET/POST/PATCH/DELETE
console.log(request.method); 

url的处理

GET请求处理

携带的参数一般是放在URL上,如Get请求:http://localhost:8080/login?username=fzb&password=123456如何进行解析

const url = require("url");
const qs = require("querystring");
//省略大部分代码......
const  pathname, query  = url.parse(request.url);
const  username, password  = qs.parse(query);
console.log(pathname, username, password); // /login fzb 123456

POST请求处理

POST请求数据一般是放在请求体body里面的,POST请求可以添加文件,那么不可能一个请求就可以把数据完整传过去,那么就需要采用的方式接收

var result = "";
  //   request.setEncoding("utf-8");
  request.on("data", (data) => 
    console.log(data); // 结果是Buffer类型的数据,如果想对传过来的数据直接转换,取到的data直接是解码好的, 上方加入 request.setEncoding("utf-8");
    result += data; // 字符串拼接时自动调用toString转换了
  );
  // 同时还可以监听end事件,一样的效果
  request.on("close", () => 
  console.log(result);
  console.log("数据传送完成~,结果是:", result);
  const  username, password  = JSON.parse(result);
  console.log(username, password); // fzb 123456
);

headers的处理

console.log(request.headers);
//   
//     'content-type': 'application/json',
//     'user-agent': 'PostmanRuntime/7.28.4',
//     accept: '*/*',
//     'postman-token': '3f6f73e9-c26b-495b-a18e-99b5dfed16d6',
//     host: 'localhost:8080',
//     'accept-encoding': 'gzip, deflate, br',
//     connection: 'keep-alive',
//     'content-length': '50'
//   

content-type:请求携带的数据类型

  • application/json:请求携带的数据是json类型的
  • application/xml:请求携带的数据是xml类型的
  • text/plain:请求携带的数据是文本类型的
  • multipart/formdata:请求携带文件

user-agent:客户端的信息

accept:客户端可以接收的文件类型

token:token数据可以放在headers内

accept-encoding:客户端可以接受的编码方式

connection:keep-alive,请求结束后默认保持连接,保持连接的时间是有限的,Node内是5s

content-lenght:携带数据的长度(大小)

response对象

返回响应结果

其实本质上requestresponse对象,继承自Stream,那么返回响应结果,这样操作:

response.write("write方法");
response.end("hello server");

但是response却没有了close方法,结束响应结果只能用 end

返回状态码

告诉客户端本次请求的状态,返回对应的状态码

常见状态码

  • 200:请求成功
  • 3xx:请求重定向
  • 400:客户端错误,发送请求的语法存在错误
  • 401:客户端权限不够
  • 403:服务器拒绝服务
  • 404:无法请求到资源,一般是url地址问题
  • 5xx:服务器端错误
response.statusCode = 200;
// 或
response.writeHead(200);

响应头文件

告诉客户端请求相关信息

// 方法一:response.setHeader 一条一条设置
response.setHeader("Content-type", "application/json;chartset=utf8");
// 方法二:对象式设置响应头
response.writeHead(200, 
  "Content-type": "application/json;chartset=utf8",
);

例子:响应结果<h1>Http</h1>,浏览器接收时当字符串处理,但是想要其自动当html进行解析,该怎么做:响应头设置浏览器如何解析(Content-type)

response.writeHead(200, 
  "Content-type": "text/html;chartset=utf8",
);
response.end("<h1>http</h1>");

当html进行解析,该怎么做:响应头设置浏览器如何解析(Content-type)**

response.writeHead(200, 
  "Content-type": "text/html;chartset=utf8",
);
response.end("<h1>http</h1>");

浏览器响应展示

http模块发送网络请求

http模块除了可以用来开发服务器,还可以用来做网络请求~

发送GET请求

const http = require("http");
http.get(
  
    host: "localhost",
    path: "/login",
    port: 8080,
  ,
  (res) => 
    let result = "";
    res.on("data", (data) => 
      result += data;
    );
    res.on("end", () => 
      console.log(result);
    );
  
);

发送POST请求

http没有post方法,只能通过request方法手动指定请求的方法。

发送完成之后,需要手动将本次请求结束。

const req = http.request(
  
    host: "localhost",
    path: "/login",
    port: 8080,
    method: "POST",
  ,
  (res) => 
    let result = "";
    res.on("data", (data) => 
      result += data;
    );
    res.on("end", () => 
      console.log(result);
    );
  
);
req.end();

nodejs入门:常用模块汇总之http模块(代码片段)

http模块是nodejs中非常重要的模块,本文从3个demo入手,入门学习http模块简单demo主要步骤:引入http模块创建服务器服务器监听某指定端口给出响应结束响应代码://引入模块consthttp=require("http");//创建服务... 查看详情

nodejs的模块系统(代码片段)

目录1.核心模块Nodejs为JavaScript提供了很多服务器级别的API,这些API绝大多数都被包装到了一个具名的核心模块中了例如文件操作的fs模块、http服务构建的http模块、path路径操作模块、os操作系统信息模块...如果你要用,就... 查看详情

nodejs中的模块化(代码片段)

NodeJS中的模块化模块化开发CommonJS画图解析赋值的全过程module.exports又是什么require函数的细节(查找规则)模块加载过程CJS和ESmodule的区别在NodeJS中用到的模块化方案是CommonJS模块化开发在开发中,将整个大的项目分解... 查看详情

nodejs的http模块不是能够立即接收/发送整个请求/响应吗?(代码片段)

我正在学习http的nodejs模块。我在documentation找到一个部分说:接口小心不要缓冲整个请求或响应这是否意味着该模块不能立即接收/发送整个请求/响应,而是以块的形式接收/发送?答案这是否意味着该模块不能立即接收/发送整个... 查看详情

javascript用于下载(http)uri的nodejs模块。(代码片段)

查看详情

在nginx中开发一个http模块(代码片段)

1.前言首先来分析一下HTTP模块是怎样介入Nginx的。当master进程fork出若干个workr子进程后,每一个worker子进程都会在自己的for死循环中不断调用事件模块:for(;;)....ngx_process_events_and_timers(cycle);/*调用事件模块*/....事件模块检... 查看详情

nodejs调用函数和模块(代码片段)

内部函数调用: //导入httpvarhttp=require('http');//导入模块函数//创建http.createServer(function(request,response)response.writeHead(200,'Content-type':'text/html;charset=utf-8' 查看详情

nodejs之http核心模块构建简单服务器(代码片段)

nodejs之HTTP核心模块在vscod中打开js文件,右键js文件,在集成终端中打开。//1.加载http核心模块varhttp=require('http');//2.使用http.createServer()创建一个web服务器varserver=http.createServer();//3.服务器要做的事儿//提供服务&#... 查看详情

带你入门nodejs第二天——http模块化npmyarm(代码片段)

...一天——node基础语法及使用带你入门nodejs第二天——http模块化npmyarm带你入门nodejs第三天—express路由带你学习nodejs第四天——身份认证及缓存1.表单处理表单(form):表单用于收集用户输入信息,并将数据提交给... 查看详情

nodejs之http模块详解(代码片段)

一、Web服务器什么是Web服务器?当应用程序(客户端)需要某一个资源时,可以向一个台服务器,通过Http请求获取到这个资源;提供资源的这个服务器,就是一个Web服务器;目前有很多开源的Web服... 查看详情

nodejs之url模块(代码片段)

...p.createServer,还有根据不同的请求路径来设置路由选择啦,模块引入,创建模块啦,巴拉巴拉的东西。现在还没有看完这本书,看完了再来写读后感吧。  今天主要记录的是关于nodejs里面的一个简单的模块,url模块。这个url的 查看详情

nodejs篇express(代码片段)

...件解决跨域nodejs相关其它内容前言express作为nodejs必学的模块之一,从这篇文章开始,介绍express一些基础内容,express的安装,restful接口规范,express的接口开发,express的跨域处理,express的中间件使用&#x... 查看详情

nodejs开发,手把手开始第一个服务器程序(代码片段)

...ript核心+DOM+BOM    Node中的js:ECMAScript核心+全局成员+模块系统(系统模块 查看详情

nodejs中模块成员的导入与导出(代码片段)

NodeJS中模块成员的导入与导出栗子:先创建两个JS文件【我这儿是a和b的js文件】a.js//a.js//在模块内部定义变量letversion=1.0;//在模块内部定义方法constsayHi=name=>return`您好,$name`;//向模块外部导出数据本身exports就是导出的意思//直白... 查看详情

nodejs学习笔记一(sublimeatom开发环境,http模块,fs模块的初识)

http服务 letserver=http.createServer(function(req,res){     }); 监听:server.listen(8080); request   请求response  相应 编辑器配置相应的环境sublime:& 查看详情

node自定义模块(代码片段)

每一个nodejs文件就是一个模块,每一个模块就是一个nodejs文件,一般这个模块会返回一个对象,这个对象包含了这个模块的所有操作方法和属性现在自己封装一个自定义的模块,使用箭头函数lethttp=require('http')letstart=()=>l... 查看详情

nodejs(代码片段)

安装https://nodejs.org/en/download/自动启动工具安装npminstall-gsupervisor启动supervisorapp.jshttp模块consthttp=require(‘http‘)http.createServer((req,res)=>res.writeHead(200,‘Content-Type‘:‘text/html;charset=ut 查看详情

nodejs中间件理解(代码片段)

...件来简化和隔离这些基础设施与业务逻辑之间的细节,让开发者能够关注在业务的开发上,以达到提升开发效率的目的。中间件的行为比较类 查看详情