简介
node.js相信大家并不陌生,现在很多公司招前端也是要求前端人员必须会node了
先说一下应用场景,目前公司中用node主要是用node来做中间层,当然是大多数公司,因为一般公司项目都已经成型了,加上node人员不好招,所以真完全用来做后台的很少(不过做起来是完全没问题的)。
中间层
很多人都在说node适合做中间层,那么中间层是什么呢?
听着好听,用大白话讲就是给前后端擦屁股的,最早是java的中间件概念,后来后台都不愿意做,然后大公司很多很大很老的项目,没法动,之前写的人也早走了,这时候用中间层接着搞是最方便的了。
前言
大家获取听过node相关的一些框架、express、koa,或者一些企业级应用到egg也好,配合前端服务端渲染的next、nuxt的等等吧,为啥不直接讲koa这种方便的东西呢,因为我一直觉得一件事,工具强了,人就弱了,框架这种东西比狗还多,几年换一个主流、只有先把基础学会,框架其实百变不离其宗。
简易服务器
nodejs肯定是个服务器,那么大家也都知道,任何浏览器和服务器之间的通信都是用http协议来完成的。那么理论上来说,写一个服务器需要对http服务有非常深的了解,不过有兴趣大家可以搜一下,看完了头发都掉光了。node作者肯定也想到了这个事,所以nodejs 系统自带的包里也有http相关的模块来直接用
创建文件
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了
虽然咱们现在console出来了,但是你可以看到浏览器了没有任何东西
一直在转,很简单因为咱们的服务器什么都没返回,至于怎么返回下文会说
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/
就可以看到内容了
处理请求
既然能返回数据了,咱们再来看看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
不过大家可能奇怪为什么会访问一个/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就会出现
是不是很简单
当然了,咱们这只是一个很简单的例子,至于大家可能听过或者见过什么koa-router也好或者等等的router
可以直接router.get post 也可以渲染静态文件,api服务的话可以走到controller里等等的功能吧,原理其实都是这,只不过那些东西帮你封装好了而已,不过后续咱们这个系列里也会提到。
有什么感兴趣的,或者遇到什么问题可以直接加我好友,咱们一起沟通
微信:Dyy916829411
qq: 916829411