Nodejs-基础-http

简介

node.js相信大家并不陌生,现在很多公司招前端也是要求前端人员必须会node了
先说一下应用场景,目前公司中用node主要是用node来做中间层,当然是大多数公司,因为一般公司项目都已经成型了,加上node人员不好招,所以真完全用来做后台的很少(不过做起来是完全没问题的)。

中间层

很多人都在说node适合做中间层,那么中间层是什么呢?
听着好听,用大白话讲就是给前后端擦屁股的,最早是java的中间件概念,后来后台都不愿意做,然后大公司很多很大很老的项目,没法动,之前写的人也早走了,这时候用中间层接着搞是最方便的了。

前言

大家获取听过node相关的一些框架、express、koa,或者一些企业级应用到egg也好,配合前端服务端渲染的next、nuxt的等等吧,为啥不直接讲koa这种方便的东西呢,因为我一直觉得一件事,工具强了,人就弱了,框架这种东西比狗还多,几年换一个主流、只有先把基础学会,框架其实百变不离其宗。

简易服务器

nodejs肯定是个服务器,那么大家也都知道,任何浏览器和服务器之间的通信都是用http协议来完成的。那么理论上来说,写一个服务器需要对http服务有非常深的了解,不过有兴趣大家可以搜一下,看完了头发都掉光了。node作者肯定也想到了这个事,所以nodejs 系统自带的包里也有http相关的模块来直接用
image.png

创建文件

nodejs需要提前安装,官网上直接下载安装就可以,会装qq 装node也是完全没问题的

首先咱们新建一个项目,里面建一个server.js, 注意不能有中文,名字是随便的,然后代码写成现在这样

const http = require('http');

http.createServer(()=>{
  console.log('有新链接')
})

然后这个时候我们在终端里运行这个文件 node server.js
注意,这个时候命令行里直接执行完了,就结束了。这里有个概念需要清楚
一台服务器,是执行一下就完了么?答案肯定是不是,一台服务器需要永远在运行,但是咱们现在写的服务器一下子就结束了,因为咱们还有个非常重要的东西没有做,就是 监听

监听 —— 通俗点来说就是开一家超市,需要有个售货员在哪等着,有人来了就结账,监听就是这个意思。往专业的角度来说说就更简单了,一台服务器可能会跑很多服务器,比方说web相关的,邮件相关的,什么游戏相关的,这个时候就需要指定一个端口,相当于你订外卖得告诉别人门牌号,好的接下来我们来改一下这个代码

const http = require('http');

let server = http.createServer(() => {
  console.log('有新链接');
});

// 监听端口
server.listen(5000);

这个端口是随便给的,不过有一些通用的端口可能会被占了,比如80-web服务,如果你电脑上装了这些服务就会报错、改一下就好了,后面会说到端口怎么共存,也就是所谓的 端口转发

然后运行咱们的文件 node server.js 就会看到什么都没有,因为他在一直监听,这时候打开浏览器
输入网址 http://localhost:5000/
然后查看终端就会看到console.log了
image.png

虽然咱们现在console出来了,但是你可以看到浏览器了没有任何东西
image.png
一直在转,很简单因为咱们的服务器什么都没返回,至于怎么返回下文会说

http.createServer

**
首先来介绍一下 createServer, 他这个第一个会调里会有两个参数
request 请求 - 输入-请求的信息
response 相应 - 输出-服务器的响应

response 里有两个 方法,一个是**write **一个是 end , 也就是一个是写东西,一个是结束,好的咱们再来改造一下代码

const http = require('http');

let server = http.createServer((req, res) => {
  res.write("hello");
  res.end();
});

// 监听端口
server.listen(5000);

注意,修改过文件之后需要关闭服务重新启动 打开终端按 control + c 即可

这时候再来访问http://localhost:5000/
image.png
就可以看到内容了

处理请求

既然能返回数据了,咱们再来看看request里的东西

const http = require('http');

let server = http.createServer((req, res) => {
  console.log(req.url);
  res.write("hello");
  res.end();
});

// 监听端口
server.listen(5000);

首先咱们把请求路径打出来,然后浏览器打开http://localhost:5000/1.jpg
这时候终端里就会打印出来1.jpg
image.png
不过大家可能奇怪为什么会访问一个/favicon.ico
这个是网站的图标,这个是chrome自动帮你请求的
如果咱们不想看到他可以直接一个if return掉

这时候我们再来改造一下代码

const http = require('http');

let server = http.createServer((req, res) => {
  console.log(req.url);
  switch (req.url) {
    case '/1.html':
      res.write('1.html');
      break;

    case '/2.html':
      res.write('2.html');
      break;
    default:
      res.write('404');
      break;
  }

  res.end();
});

// 监听端口
server.listen(5000);

然后访问1.html就会出现
image.png
是不是很简单

当然了,咱们这只是一个很简单的例子,至于大家可能听过或者见过什么koa-router也好或者等等的router
可以直接router.get post 也可以渲染静态文件,api服务的话可以走到controller里等等的功能吧,原理其实都是这,只不过那些东西帮你封装好了而已,不过后续咱们这个系列里也会提到。

有什么感兴趣的,或者遇到什么问题可以直接加我好友,咱们一起沟通

微信:Dyy916829411
qq: 916829411

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值