持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情
系列介绍
该系列主要是介绍一些nodejs相关的基础知识,没有什么特别难的知识点,都是一些比较基础知识点。大家学习起来,也会比较容易理解和接收。
这些知识点,也是以前自己学习nodejs的时候,学习过的知识点。有些知识点,可能是由于学习的时间比较久了,也有可能是平时工作中用到的机会比较少,也差不多快把它们都忘记掉了。现在把它们都写下来,写成文章,一方面是记录下自己以前学习的nodejs知识点,一方面也是复习巩固自己以前学习的nodejs知识点。不要学着学着,就把以前的知识点都忘光了。
nodejs介绍
从nodejs摘抄过来的node介绍:
Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具!
Node.js 在浏览器之外运行 V8 JavaScript 引擎(Google Chrome 的内核)。 这使得 Node.js 的性能非常好。
Node.js 应用程序在单个进程中运行,无需为每个请求创建新的线程。 Node.js 在其标准库中提供了一组异步的 I/O 原语,以防止 JavaScript 代码阻塞,通常,Node.js 中的库是使用非阻塞范式编写的,使得阻塞行为成为异常而不是常态。
当 Node.js 执行 I/O 操作时(比如从网络读取、访问数据库或文件系统),Node.js 将在响应返回时恢复操作(而不是阻塞线程和浪费 CPU 周期等待)。
这允许 Node.js 使用单个服务器处理数千个并发连接,而不会引入管理线程并发(这可能是错误的重要来源)的负担。
Node.js 具有独特的优势,因为数百万为浏览器编写 JavaScript 的前端开发者现在无需学习完全不同的语言,就可以编写除客户端代码之外的服务器端代码。
在 Node.js 中,可以毫无问题地使用新的 ECMAScript 标准,因为你不必等待所有用户更新他们的浏览器,你负责通过更改 Node.js 版本来决定使用哪个 ECMAScript 版本,你还可以通过运行带有标志的 Node.js 来启用特定的实验性功能。
我们可以从介绍里面看到,nodejs还是挺棒的。
nodejs遵循的是commomjs规范,所以使用nodejs的时候,需要按照commomjs规范来编写代码。
环境安装
实现之前,你首先需要安装nodejs环境。因为我们写的代码需要在node环境上运行,如果你没有,那么文件会运行不了。
以下是nodejs的安装地址,如果你没有安装的话,可以先把它安装上。安装了可以忽略这一步,跳到下面一步。
nodejs的路由
我们在前端开发spa(单页面)应用时,要想从a页面切换到b页面,需要通过切换路由,来实现a页面跳转到b页面。每个页面都有一个对应的路由,当路由改变了,页面也跟着改变。
那在nodejs里,路由又是什么?
在nodejs中,所谓路由就是node服务器会根据用户输入不同的url(实际是path不同,domain是相同的,包括协议、host、端口),从而返回不同的页面。
实际上就是url和页面的映射关系,请求不同的url,可以得到不同的页面。
实现
html页面
先创建一个命名为index.html页面,需要html页面和node服务器一起配合实现。
在html文件里,创建2个button,分别为
- 登录
- 用户
<button class="login">登录</button>
<button class="user">用户</button>
接着咋script标签里,定义一个方法,里面是用原生js写的ajax请求。
function ajax(method,url){
let xhr = new XMLHttpRequest()
xhr.open(method,url)
xhr.onreadystatechange=function(){
if(xhr.readyState ==4){
if(xhr.status==200){
console.log('请求成功');
}else{
console.log('请求失败');
}
}
}
xhr.send()
}
主要用来向node服务器发送请求。
拿到登录button的dom实例,绑定点击事件,发送ajax请求。同时定义好请求的url和请求的方法
let loginBtn = document.querySelector('.login')
loginBtn.addEventListener('click',()=>{
ajax('post','http://localhost:3000/login')
})
拿到用户button的dom实例,绑定点击事件,发送ajax请求。同时定义好请求的url和请求的方法
let useBtn = document.querySelector('.user')
useBtn.addEventListener('click',()=>{
ajax('get','http://localhost:3000/user?id=1')
})
到这里,html页面已经搭建完成。
node服务器
创建一个index.js文件,用来创建一个node服务器。
引入http模块,创建一个服务器,监听端口。
const http =require('http');
const server = http.createServer((req,res)=>{
})
server.listen(3000,()=>{
console.log('服务器启动了');
})
这样就可以创建一个服务器,但是我们还需要引入url模块,用来解析请求的url。
const url = require('url')
const server = http.createServer((req,res)=>{
let {pathname} = url.parse(req.url)
console.log('pathname',pathname);
})
node服务器代码写完了,在cmd里,用node运行index.js文件。
在html页面里,我们先点击登录按钮,发送请求,在cmd里查看打印日志。
我们可以看到,把登录请求的路由打印出来了/login
接着,我们点击用户按钮,发送请求,在cmd里查看打印日志。
我们可以看到,把用户请求的路由打印出来了/user
小结
在nodejs中,我们使用url模块把请求url给解析出来,拿到路由(pathname)。通过判断为不同的路由,执行不同的操作逻辑,最后把相应的数据/页面返回给到客户端。
最后,放上自己比较喜欢的一句诗句:
千淘万漉虽辛苦,吹尽狂沙始到金 - 唐 刘禹锡《浪淘沙》