学会用node.js服务器写接口

服务器相关概念

服务器与客户端

服务器是提供网络服务的机器,通过安装特殊的软件(或者是运行某段特殊的代码)来提供服务。

服务器  = 电脑 + 能给其它电脑/设备提供服务的软件

客户端与服务器:提供服务的是服务器,享受服务的是客户端

服务器的类型

根据服务不同,服务器的类型也不同:

  • web服务器。安装apache, tomcat, iis, 或者在nodejs环境写代码 来提供:图片浏览,新闻浏览....等服务的服务器。
  • ftp服务器。安装serv-U软件,为其它电脑提供文件下载,共享服务。
  • 数据库服务器。安装mysql软件,为其它电脑提供数据库服务。
    ....

web服务器:

  • 用户通过浏览器来享受web服务器提供的服务
  • 我们用url地址来访问某个web服务器上的资源
  • 浏览器端发起请求,web服务器收到请求后,响应这个请求,并将处理结果返回给浏览器

  • 浏览器端与web服务器是通过http(或者是https)协议来进行请求和响应

ip地址

全称:Internet Protocol Address。

作用:标识一个网络设备(计算机、手机、电视)在某一个具体的网络当中的地址。要访问某个电脑上的资源,先要找到它的ip。

分类:ipV4   ipV6 (教育部办公厅关于贯彻落实《推进互联网协议第六版(IPv6)规模部署行动计划》的通知_部门政务_中国政府网)

格式:[0-255].[0-255].[0-255].[0-255] 即为四个 0-255 的数字组成(以ip4为例)。在同一个网络中,计算机的IP是不允许相同的,都是唯一的。

127.0.0.1 特指本机ip地址。

这个 百度一下,你就知道 会指向哪里?

域名

域名:ip地址的别名,由于ip地址不好记忆,我就给它们取个好记的别名。localhost这个域名特指127.0.0.1这个地址。

域名解析系统:把域名翻译成Ip地址的系统。

端口

一个IP地址的端口可以有65536个,范围是从[0,65535])。不同的端口被不同的软件占用,以提供不同的服务。

一台电脑可以通过安装多个服务器端软件来提供服务,比如Web服务、FTP服务、SMTP服务等。显然,仅仅通过ip地址是无法区分不同的服务的,这里就需要用到 “IP地址+端口号”来区分不同的服务

理解

如果理解IP地址(一台服务器)是一栋大商场,端口就是商场中的商铺的编号。

如果理解IP地址(一台服务器)是公司的前台电话,端口就是公司中各个部门的分机号。

  1. 服务器要提供服务必须要通过指定的端口
  2. 服务器与客户端都需要通过端口要进行通信
  3. 端口是可以编程分配
  4. 有一些端口号是被预定了的。

  • http: 80
  • https:443
  • mysql:3306

通过netstat -a -n -o 查看端口使用情况

协议

制定客户端与服务器之间的通讯规则。不同的协议的作用也不同。

http协议:

  • HTTP(HyperText Transfer Protocol) 超文本传输协议。
  • 协议双方: 浏览器与web服务器
  • 请求由浏览器发起的
  • HTTP 协议中明确规定了请求数据响应数据的格式(报文)
    • 浏览器 请求 资源 要遵守 http 协议:  请求报文(请求行,请求头,请求体)
    • 服务器 返回 资源 要遵守 http 协议:  响应报文(响应行,响应头,响应体)

用http 模块写一个简单的web服务器

自己完成的网页,如果让其他人能够访问?

目标

用http模块写一个简单的服务器,让同学来访问本机的服务

要点

  • 引入nodejs中的核心模块:http
  • 使用createServer来创建服务
  • 使用listen方法来启动服务

操作

有三步:

  • 1. 手写代码,实现服务器功能
  • 2. 运行代码,启动服务
  • 3. 访问服务,测试功能

第一步:新建一个文件,名为  d:/src/01http.js( 文件名及路径名可以自行设置,建议均不使用中文字符), 内容如下

// 1. 引入http模块
const http = require('http');

// 2. 创建服务
const server = http.createServer(function(req, res) {
  console.log('有人来访问了')
  // 向客户端发送内容,并结束本次响应
  res.end('hello world');
});
// 3. 启动服务
server.listen(8081, function() {
  console.log('服务器启动成功,请在http://localhost:8081中访问....');
});

第二步:运行js代码,启动服务。

在小黑窗中进入到01http.js所在的目录,键入命令 node 01http.js,此时会弹出一个小黑窗,不要关。

第三步:测试功能

打开一个浏览器页面,输入地址:http://localhost:8081,观察效果:

  • 浏览器中的效果
  • 小黑窗中的效果

停止服务:ctrl + c

拓展

共享让同学来访问

把localhost改成你自己电脑的ip地址,例如:http://192.xxx.xxx.xxx:8081,再把这个路径发你的同学(同一个局域网)来访问。

如果不能被其他同学访问,有可能你需要手动关闭你自己计算机的防火墙

工作原理

使用http模块在本机上创建一个虚拟服务器,它来接收浏览器的请求,并给出响应。

注意:

  • 小黑窗不要关,它就是服务器
  • 服务器本身不会有主动行为(小黑窗看起来没有任何变化),它在时刻等待客户端的访问
  • 不要用鼠标选中小黑窗的内容,会导致程序假死
  • 修改代码后要重启
    • 更改res.end()的内容,重启后,再次观察。
    • 重启服务:就是重新运行程序(按下向上的箭头,再回车)。

小结

  1. node中手写web服务器要使用 _______ 模块
  2. 基本的三步是 ______, ______, _______
  3. 如何停止服务?
  4. 修改服务器代码之后,是否要重新重启服务? 如何重启?

代码解析-理解请求和响应

代码解析

  • 引入核心模块,得到的http是一个对象。
  • http.createServer方法创建一个http服务。参数是一个回调函数:当有http请求进来时,它会自动被调用。请求一次,它就被调用一次
    • 第一个参数:客户端的请求
    • 第二个参数:设置对本次请求的响应
      • res.end() :设置响应体,结束请求。
  • server.listen() 用来监听端口。
    • 格式:server.listen(端口号,[回调函数])。回调是可选的。
    • 说明:
      • 如果监听成功,则回调函数会执行一次。
      • 如果不成功(例如端口被占用),会报错。

理解请求和响应

请求

当web服务器就绪之后,如果没有客户端来访问它,它也是不会有任何效果的。也就是说回调函数不会执行。

而每一次的请求,都会导致回调函数要执行一次。

响应

通过res.end来设置响应的内容,res.end()的格式只是能是buffer或者是String

====小结练习====

  • 14
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Node.js中编接口可以使用很多不同的方式,其中最常用的方式是使用Node.js中的Express框架来编RESTful API。 以下是编一个基本的RESTful API的步骤: 1. 创建一个新的Node.js项目,初始化一个package.json文件,并安装Express框架。 ``` npm init npm install express ``` 2. 在项目根目录下创建一个app.js(或index.js)文件,并将以下代码添加到该文件中: ```javascript const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 3. 上面的代码创建了一个Express应用程序,设置了一个基本路由,当访问应用程序的根路径时,会返回一个“Hello World!”消息。app.listen()方法用于启动服务器,将其绑定到3000端口。 4. 运行项目,命令行输入 `node app.js`(或 `node index.js`),并访问`http://localhost:3000/`,可以看到“Hello World!”消息。 5. 要创建更多的路由,可以使用Express提供的不同的HTTP方法(如GET、POST、PUT、DELETE等)和路由方法(如app.get()、app.post()、app.put()、app.delete()等)。 例如,以下代码添加了一个基本的POST路由,以接受表单数据并将其发送回客户端: ```javascript app.post('/', (req, res) => { res.send(`Received data: ${req.body}`); }); ``` 6. 对于更复杂的API,可以使用Express中间件来处理各种请求,例如身份验证、日志记录、错误处理等。 这里只是一个简单的示例,了解了这个基本的结构之后,可以通过阅读文档和参考其他资源来深入学习和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值