Node学习之(第二章:http模块)

前言

继续上一节的探讨,今天我们来聊聊Node中怎么搭建一个简单的web服务器。平时大家在撸码的过程中,经常需要向服务器发送请求,然后服务器接受请求,响应数据。今天我们就来自己手写一个简单服务器,根据前端请求,我们来响应相关数据。

开始

开启一个本地服务器需要Node.js中http核心模块,至于核心模块是什么,我会在接下来的章节中和大家解释,也欢迎大家持续关注我的前端Node.js的学习之旅。

  1. http--模块提供了搭建本地服务器的API,首先我们在项目中引入;
let http = require('http')

引入之后我们利用http.createServer()方法得到一个服务器实例。

let server = http.createServer() // createServer()方法返回一个server实例,所以我们需要一个变量来接收
  1. 经过以上两步,我们已经搭建好了一个服务器实例,然后我们给服务器实例绑定接收request的事情处理函数,代码如下:
server.on('request', (req, res) => {
  console.log(req.url) // 获取到请求的路径(请求路径永远以“/”开头)
})

// 给服务器绑定接收请求的处理事件,当服务器接收到客户端发送的请求后,会调用后面的处理函数,处理函数接收两个参数:请求信息对象,响应信息对象。
  1. 绑定监听端口号,开启服务器。代码如下:
server.listen(3000, () => {
  console.log('服务器开启成功,可以通过访问http://127.0.0.1:3000/来获取数据~~')
})

// server.listen()用来绑定监听的端口号,可以传入第二个参数,当服务器开启成功后,触发后面的回调函数
  1. 最后看到的效果如下图所示:

我们看到请求路径被打印在了CMD窗口中。

好了,经过这简单的操作是不是已经完成了一个服务器的简单搭建,接下来我们来实现一个需求:

我们实现这个需求,只需要在绑定服务器监听的事件处理函数中获取到用户的请求路径,然后根据不同路径返回不同数据即可,这个也不难。详情代码看下:

let http = require('http')
let server = http.createServer()

server.on('request', (req, res) => {
  let url = req.url //得到请求的路径 (请求的路径永远以‘/’开头)
  if (url === '/') {
    res.end('index page')
  } else if (url === '/login') {
    res.end('login page')
  } else if (url === '/register') {
    res.end('register page')
  } else if (url === '/product'){
    let arr = [
      {
        name: 'iphone X',
        price: 8888
      },
      {
        name: 'iphone 7',
        price: 4320
      }
    ]
    // 响应的数据类型必须是字符串或者二进制数据
    res.end(JSON.stringify(arr))
  } else {
    res.end('404 NOT found')
  }
})

server.listen(3000, () => {
  console.log('服务器启动成功了,,可以访问http://127.0.0.1:3000/啦')
})

最后实现的效果图如下:

我们看到我们请求不同的路径,服务器给我们返回了不同的内容,并且显示在了网页中。

说明

本仓库是自己Node.js学习过程的真实记录,以后会每天更新一些新的知识点,希望可以对想要学Node.js的同学有一些帮助,欢迎star,你们的点赞是我更新的持久动力。同时如果你觉得本仓库中的一些知识点有错误也可以issue我,方便后期我订正!

本仓库同时在博客园和掘金更新,欢迎写博客的朋友一起学习交流。

博客园

找我

掘金

找我

GitHub

找我

原文地址:https://www.cnblogs.com/dreamcc/p/10805263.html

时间: 2024-10-11 06:27:43

Node学习之(第二章:http模块)的相关文章

Mysql Cookbook学习笔记第二章

1,使用python链接mysql + ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # -*- coding: utf-8 -*- # connect.py --连接到MySQL服务器 import sys import MySQLdb try:     conn = MySQLdb.connect(db = "cookbook",                            host = "localhost"

C++ Primer Plus学习:第二章

C++入门第二章:开始学习C++ 进入C++ 首先,以下是一个C++程序: //myfirst.cpp 显示一行文字 #include<iostream> //预处理器编译指令 int main() //函数头 { using namespace std; //编译指令 cout<<"学习C++"; //显示消息 cout<<endl; //开始下一行 cout<<"你不会后悔!"; //更多输出 return 0;

Android学习笔记—第二章 Android四大组件

第二章 Android四大组件 Activity(活动窗口): Android程序中最基本的模块,为用户操作而展示的可视化用户界面.一个Android应用程序可以只有一个Activity,也可以包含多个Activity,数量及每个Activity的作用取决于应用程序及其设计. (1)Activity的生命周期 创建→运行   onCreate   onStart   onResume 运行→销毁   onPause    onStop    onDestory 运行→停止(不可见  不可操作)

《操作系统概念》学习笔记-第二章

第二章 操作系统结构 在具有多个命令解释程序选择的系统中,解释程序被称为外壳(shell) 命令解释程序的主要作用是获取并执行用户指定的下一条命令. 有三种应用程序员常用的API,适用于windows系统的win32API,适用于POSIX系统的POSIX API,以及用于设计运行于JAVA虚拟机程序的JAVA API. 操作系统传递参数有三种方法: 最简单的方法是通过寄存器来传递参数,不过有时,参数数量会比寄存器多,这时,这些参数通常存在内存的块和表中,并将块的地址通过寄存器来传递.Linux

Windows Forms编程实战学习:第二章 欢迎使用Visual Studio

第二章 欢迎使用Visual Studio 1,AssemblyInfo文件 包含程序集的属性,向应用程序添加元数据 [assembly:<attribute>(<setting>)] AssemblyInfo常用属性 属性 描述 AssemblyTitle 程序集标题 AssemblyDescription 程序集描述 AssemblyCompany 程序集公司名 AssemblyProduct 程序集产品名 AssemblyCopyright 程序集的版权字符串 Assembl

【PMP】Head First PMP 学习笔记 第二章 组织、约束和项目

第二章 组织.约束和项目 如果你希望正确地完成工作--最好有一个正确的组织. 项目联络人 项目联络人(project expediter),只是记录项目的进展情况,但是没有权利对项目做任何决策.他可能参与项目,但是并不管理任何事务. 不同类型的组织项目 职能型 项目经理的决策需要和职能经理确认 项目经理作为职能经理的助手,协助职能经理完成工作 项目经理大部分时间都用于行政任务,通常只有部分时间投入到项目管理中 在职能型组织中往往会有项目联络人 矩阵型 弱矩阵型 项目经理有一些经理有一些权利,但是

c#高级编程第七版 学习笔记 第二章 核心c#

第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用System.Console执行控制台I/O 使用内部注释和文档编制功能 预处理器指令 C#编程的推荐规则和约定 2.1 第一个c#程序 2.1.1 代码 using System; namespace Wrox { Public class MyFirstClass { static void Ma

《JS权威指南学习总结--第二章词法结构》

第二章词法结构 内容要点: 一.注释 1. //表示单行注释 2. /*这里是一段注释*/ 3.一般编辑器里加注释是:选中要加注释的语句,按 ctrl+/ 二.直接量 所谓直接量,就是程序中直接使用的数据量,比如: 数字.小数.字符串文本.布尔值.正则表达式直接量 三.标识符和保留字 标识符作用:标识符就是一个名字,在JS中,标识符用来对变量和函数进行命名,或者用做JS代码中某些循环语句中的跳转位置的标记. 标识符命名规则: 1.必须以字母.下划线(_)或美元符($)开始. 2.后续的字符可以是

Node.js学习(第二章:node核心模块--fs)

前言 Node.js中赋予了JavaScript很多在浏览器中没有的能力,譬如:文件读写,创建http服务器等等,今天我们就来看看在node中怎样用JavaScript进行文件的读写操作. 读文件 我们在data文件夹下新建一个hello.txt,并且在里面写入:hello, node.js!! ,如图: 我们在hello.txt同级目录下创建一个hello.js文件,我们在这个js文件中利用Node提供的文件操作API, 读取hello.txt文件中的内容. node中对文件相关的操作需要依赖

“AS3.0高级动画编程”学习:第二章转向行为(下)

在上一篇里,我们学习了“自主角色”的一些基本行为:寻找(seek).避开(flee).到达(arrive).追捕(pursue).躲避(evade).漫游(wander).这一篇将继续学习其它更复杂,更高级的行为. 原作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com 一.对象回避(object avoidance) 对象回避的正式解释为:角色预测出对象的行动路径,然后避开他们. 也可以通俗的描述为:假如有一个"灰太狼抓喜羊羊"的游戏场景,“喜羊羊"