当前位置: 首页 > news >正文

【前端升全栈】 五分钟了解Node.js

📑博客主页:@丘比特惩罚陆

💖欢迎关注:点赞收藏⭐留言✒
💬系列专栏:web前端、嵌入式、笔记专栏
🎮 加入社区: 丘比特惩罚陆
🥇人生格言:选对方向,每走一步都是进步!
✒️欢迎大佬指正,一起学习!一起加油!

👏 希望大家能小手一动,帮忙点个赞!

😁资源邮箱:2237814512@qq.com

目录

1.Node.js介绍

2.Node.js介绍

2.1下载和安装

 2.2 node.js和js的区别

3 commonjs-演示 

4 debugger 

5 server端和前端的区别

服务稳定性:

考虑CPU和内存(优化、扩展)

日志记录

安全

集群和服务拆分

6 总结


1.Node.js介绍

Nodejs的用途:

  • Nodejs,是一个JavaScript的运行环境;
  • 运行在服务器,作为web server
  • 运行在本地,作为打包、构建工具

学习Nodejs的困惑:

  • Nodejs运行在服务器,而不是在浏览器环境;
  • 服务器开发的思路和套路,与前端完全不一样;

 其实 node.js 是比较简单的,API 也很简单,但是思路要转过来;

知识点介绍

 

案例架构图

 

2.Node.js介绍

2.1下载和安装

可以使用普通的下载方式,当然也可以使用NVM这个方法;

普通的方法是访问网站;http://nodejs.cn/,下载并且安装;打开命令行,运行node-v和npm -v测试;

使用NVM

 

使用nvm

 

安装

 2.2 node.js和js的区别

                      Nodejs和JavaScript的区别

ECMAScript;

javascript;

nodejs

 

ECMAScript 

 具体可以参考 es6.ruanyifeng.com,都是语法;

ECMAscript

不能操作DOM,不能监听click时间,不能发送ajax请求;

不能处理http请求,不能操作文件;

即,只有ECMAscript,几乎做不了任何实际的项目

JavaScript

使用ECMAscript语法规范,维嘉web API,缺一不可;

DOM操作,BOM操作,时间绑定,Ajax等等;

两者结合,即可完成浏览器端的任何操作 

Nodejs 

使用ECMAscript语法规范,外加NodejsAPI,缺一不可;

处理http,处理文件等;

两者结合,就可以完成服务端server的任何操作;

 关于这个可以查看 nodejs.cn/api/可以知道 nodejs API

总结

ECMAscrip是语法规范;

nodejs=ECMAscrip+NodejsAPI;

3 commonjs-演示 

commonJS node.js 自带的规范,如 module.exports 输出模块,require 引入模块。
function add(a,b){
  return a+b

}

function mul(a,b) {
  return a*b
}

module.export = {
  add,mul
}
const {add,mul} = require('./a') 
const sum = add(10,20)
const result = mul(100,200)

console.log(sum)
console.log(result)
上面讲的是如何引用自己写的文件,那么如果是 npm 包呢? 如何引用,这个我们先 npm init 初始化一下,安装一个 lodash 工具库,这个库的引用是直接 require 一个依赖名字即可,常 用_ 代替。

 



const {add,mul} = require('./a') 
const_=require('ladash')

const sum = add(10,20)
const result = mul(100,200)

console.log(sum)
console.log(result)

const arr = _.concat([1,2],3)
console.log('aee...',arr)
那么为什么要这些模块化标准?好处是可以把代码进行拆分,方便引用;

 

4 debugger 

    node.js 至今有多种 debug 的方式,比较推荐的是利用 vscode 。 我们新建一个 debugger-test 的文件夹,初始化 npm ,根据 npm 中 main 指向的我们建个 index.js main 与主文件必须名 字一致,因为是根据 main 找到这个 index.js 主文件)。 在 index.js 随便写点东西,点击右边的小虫子,再打个断点 就可以进入 debugger 模式了,跟 chrome 是非常相似的。 我们写一个比较复杂的例子再尝试一下调试模式。
const http = require('http')

const server = http.createServer((req,res) => {
   res.writehead(200,{'content-type':'text/html'})
   res.end('<h1>hello world</h1>')
})

server.listen(3000,()=>{
    console.log('listening on 300 port')
})
我们发现其实这个是发送了两次请求(一次是 localhost 展示 hello world 另一次是请求 favicon.ico 即标签左边那个小图标)。这就是为什么请求完一次还会将断点跳到 writeHead 高亮显示,第一次请求也是从这里开始.

5 server端和前端的区别

 语言和端是不一样的,不仅仅是区别于语言,各种开发工具 什么的都是不一样。前端的话就是从多个服务器下载内容来 执行,而 server 却是承受多个客户端的请求,这里就是比较 大的差别!

server开发和前端开发的区别:
  • 服务稳定性
  • 考虑内存和CPU(优化,发展)
  • 日志记录
  • 安全
  • 集群和服务拆分

 承接很多请求所以很可能有多种攻击;客户端可能只是某个人挂了其它没关系而服务端挂了大家都没得玩;可以通过PM2 进程守候就是挂了就自己重启。

服务稳定性:

  • server端可能回遭受各种恶意公鸡和误操作;
  • 单个客户端可以意外挂掉,但是服务端不可以;
通过 stream 优化, redis 拓展内存和 cpu

考虑CPU和内存(优化、扩展)

  • 客户端独占一个浏览器,内存和CPU都不是问题
     
  • server端要承载很多请求,CPU 和内存都是稀缺资源
  • 课程后面会讲解使用stream写日志,使用redis存session

日志记录

  • 前端也会参与写日志,但只是日志的发起方,不关心后续
  • server端要记录日志、存储日志、分析日志,前端不关心
  • 课程后面会讲解多种日志记录方式,以及如何分析日志

安全

  • server端要随时准备接收各种恶意攻击,前端则少很多
  • 如∶越权操作,数据库攻击等
  • 课程后面会讲解登录验证,预防xss攻击和sql注入

集群和服务拆分

  • 产品发展速度快,流量可能会迅速增加
  • 如何通过扩展机器和服务拆分来承载大流量?
  • 本课程虽然是单机器开发,但是从设计上支持服务拆分
     

6 总结

  • nodejs下载安装,两种方式
  • nodejs和前端javascript的区别,commonjs和debugger
  • server开发和前端开发的区别,重占在切换思路

相关文章:

  • 部署若依springboot-vue前后端分离项目(Nginx反向代理 2022)
  • Kafka 优化问题
  • 【opencv-c++】windows10系统VisualStudio2022配置opencv_contrib-4.6.0
  • windows安装动力学仿真软件Frost并计算cassie机器人运动学和动力学
  • 使用 SolidJS 和 TypeScript 构建任务跟踪器
  • 【C++】list的模拟实现
  • 【Kotlin基础系列】第4章 类型
  • Vm虚拟机安装Linux系统教程
  • Java设计模式-单列模式
  • 算法 | 算法是什么?深入精讲
  • C++虚函数具体实现机制以及纯虚函数和抽象类(对多态的补充)
  • Trusted Applications介绍
  • Python函数与参数
  • C++发布订阅模式
  • CentOS7 下载安装卸载 Docker——Docker启动关闭
  • 【面试系列】之二:关于js原型
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • ESLint简单操作
  • EventListener原理
  • Facebook AccountKit 接入的坑点
  • Intervention/image 图片处理扩展包的安装和使用
  • Javascript 原型链
  • Objective-C 中关联引用的概念
  • Python连接Oracle
  • SpriteKit 技巧之添加背景图片
  • ucore操作系统实验笔记 - 重新理解中断
  • vue的全局变量和全局拦截请求器
  • 翻译--Thinking in React
  • 高性能JavaScript阅读简记(三)
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 强力优化Rancher k8s中国区的使用体验
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 一个完整Java Web项目背后的密码
  • 原生Ajax
  • 中文输入法与React文本输入框的问题与解决方案
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #mysql 8.0 踩坑日记
  • $(function(){})与(function($){....})(jQuery)的区别
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (arch)linux 转换文件编码格式
  • (C++20) consteval立即函数
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (十一)图像的罗伯特梯度锐化
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)linux 命令大全
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转)重识new
  • (转载)从 Java 代码到 Java 堆
  • .bat文件调用java类的main方法
  • .net Application的目录