nodejs的介绍使用+npm的作用+淘宝镜像源+本地服务器

Node.js简介

JavaScript 能否做后端开发

在这里插入图片描述

Node.js 的出现,使得JavaScript有了做后端开发的能力。

Node.js可以做什么

Node.js 作为一个 JavaScript 的运行环境,仅仅提供了基础的功能和 API。然而,基于 Node.js 提供的这些基础功能,很多强大 的工具和框架如雨后春笋,层出不穷,所以学会了 Node.js ,可以让前端程序员胜任更多的工作和岗位!

  • 基于 Express/Koa 框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用
  • 基于 Electron 框架(https://electronjs.org/),可以构建跨平台的桌面应用
  • 基于 restify 框架(http://restify.com/),可以快速构建 API 接口项目
  • 读写和操作数据库、创建实用的命令行工具辅助前端开发
  • etc…

总之,Node.js 是大前端时代的“大宝剑”,有了 Node.js 这个超级 buff 的加持,前端程序员的行业竞争力会越来越强!

什么是 Node.js

Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.

Node.js 一个基于 Chrome V8 引擎的 JavaScript 运行环境

通俗的理解:Node.js 为 JavaScript 代码的正常运行,提供的必要的环境。

Node.js 的官网地址: https://nodejs.org/zh-cn/

Node.js中的JavaScript运行环境

在这里插入图片描述

注意:

  • 浏览器是 JavaScript 的前端运行环境。(浏览器是客户端安装的软件)
  • Node.js 是 JavaScript 的后端运行环境。(正常情况下,Nodejs要安装到服务器上)
  • Node.js 中无法调用 DOM 和 BOM 等 浏览器内置 API。

查看已安装的Node.js的版本号

打开终端(黑窗口,或者蓝窗口),在终端输入命令 node –v 后,按下回车键,即可查看已安装的 Node.js 的版本号。

如果你能够看到版本号,说明你已经安装成功了

终端窗口运行(了解)

此种方式,类似于浏览器调试工具的“Console”面板,只适合运行少量的测试代码,所以了解即可。

操作步骤:

  • 打开任意终端,直接输入 node 命令并回车
  • 执行你的JS代码,按回车表示执行
  • 按两次“Ctrl+C”退出。

使用node命令执行JS文件(掌握)

此种方式,比较常用。可以运行写到 “xx.js” 里面的JS代码,可以运行JS文件中的代码。

操作步骤:

  • 打开终端
  • 输入 “node 要执行的js文件

vscode自带终端:

  • xxx.js 文件上,鼠标右键 --> 在终端中打开 --> 出现一个终端窗口 --> node xxx.js

注意终端的路径,注意在此路径中,是否能找到你的js文件。

模块化

模块化就是把一个大的文件拆分成若干个小文件,而且还能把小文件通过特定的语法组合到一起的实现过程。

优点

模块化的优势

更利于维护

更好的复用性

node中模块化大的优势

更利于维护(如项目需要对登录模块升级,则不会影响其他模块)

更好的复用性(如一个公共的函数,封装起来,其他所有js文件都能使用这个函数)

vscode运行js

cdm命令中输入node 文件名

vscode 终端 输入 node 文件

​ 如: node .\test.js

自定义模块

共享(导出/暴露)内容给其他模块用,需要使用 module.exports 导出内容。

引入模块,如果需要使用上述模块导出的内容,可以使用 require() 加载

示例:

02-test.js – 导出内容

let age = 30;
let name = 'laotang';
let height = '175cm';
let weight = '75kg';
let square = x => x * x;

// 导出age、name、fn给其他模块使用
module.exports = {
    
     age, name, square };

03-use.js – 导入内容

let test = require('./02-test');

console.log(test); // { age: 30, name: 'laotang', square: Function...}

加载自定义模块

加载自定义模块时,必须带路径(相对路径,绝对路径都可以)

加载自定义模块时,后缀可以省略

内置模块

内置模块是Node.js 平台自带的一套基本的 API(功能模块)。也叫做核心模块。

下面介绍几个内置模块。

注意,加载内置模块,不能写路径,这是和加载自定义模块不一样的。

内置模块 - path模块

  • path 是 Node 本身提供的 API,专门用来处理路径。
  • http://nodejs.cn/api/path.html

  • 使用

    • 加载模块

      // 使用核心模块之前,首先加载核心模块
      let path = require('path');
      // 或者
      const path = require('path');
      
    • 调用path模块中的方法,来处理相应的问题,下面列举path模块中的几个方法

      方法 作用
      path.basename(path[, ext]) 返回 path 的最后一部分(文件名)
      path.dirname(path) 返回目录名
      path.extname(path) 返回路径中文件的扩展名(包含.)
      path.format(pathObject) 将一个对象格式化为一个路径字符串
      path.join([…paths]) 拼接路径
      path.parse(path) 把路径字符串解析成对象的格式
      path.resolve([…paths]) 基于当前工作目录拼接路径
      const path = require('path');
      
      // extname -- 获取文件后缀
      console.log(path.extname('index.html')); // .html
      console.log(path.extname('index.coffee.md')); // .md
      
      // join -- 智能拼接路径
      // ------------------- 智能拼接路径 -----------------------------
      // console.log(path.join('a', 'b', 'c')); // a/b/c
      
      // console.log(path.join('a', 'b', 'c', 'index.css')); // a/b/c/index.css
      
      // a里面有b,b里面有../c,言外之意,c和b同级。
      // console.log(path.join('a', 'b', '../c', 'index.js')); // a/c/index.js
      
      // __dirname 永远表示当前js文件的绝对路径
      console.log(path.join(__dirname, 'css', 'demo.css')); // /Users/tangfengpo/Study/123/Node01/code/css/demo.css
      

内置模块 - fs模块

  • fs,即 file system,文件系统,该模块可以实现对 文件、文件夹的操作

  • http://nodejs.cn/api/fs.html

  • 加载模块

    // 引入模块,引入模块的时候,可以使用var、let,但是建议使用const,因为我们不希望它改变
    const fs = require('fs');
    
读取文件
// readFile -- 异步读取文件
fs.readFile('./test.json', (err, data) => {
    
    
    if (err) {
    
    
        console.log('读取文件出错');
    } else {
    
    
        console.log(data); // 读取到的二进制数据
        console.log(data.toString()); // 得到原始数据
    }
});

fs.readFile('./test.json', 'utf-8', (err, data) => {
    
    
    if (err) {
    
    
        console.log('读取文件出错');
    } else {
    
    
        console.log(data); // 读取到的原始数据
    }
});
写入文件
const fs = require('fs')

fs.writeFile('./002.html','写入一段话888888', (err) => {
    
    
     if(err) throw err
     console.log('写入成功');
})

内置模块 - http模块

http搭建服务器

//加载http模块
const http = require('http')

//创建server对象,一般命名为server
const server = http.createServer()

//3.注册request事件,监听浏览器的请求。只要浏览器的请求,就会触发该事件。
server.on('request', (req, res) => {
    
    
  //req -- request,请求,通过它可以获取到请求相关信息。
    比如获取请求头、获取请求体、获取请求的url、请求方式等。
    
 //res --response响应,所有和响应相关的操作都通过res完成,设置响应状态码,设置响应头、设置响应状态
    res.statusCode = 200
    res.setHeader('Content-type','text/html; charest=utf-8');
    res.end('这是我的服务器')
    
})

//4.指定端口,启动服务
server.listen(3000,() => {
    
    
    console.log('我的服务器启动了')
})

req 和 res 参数

上述代码的格式基本固定。只有 请求事件 的处理函数需要说明一下。

当收到浏览器的请求后,会触发request事件,事件处理函数有两个形式参数 req 和 res。

// 代码片段
server.on('request', function (req, res) {
    
    
  // 该函数就是处理请求响应的函数
  // 形参res是响应response的简写
})

  • 形参req
    • 形参 req 是request的缩写,即请求。
    • 通过 req 对象,可以获取到 请求相关信息。
    • req.url 获取请求行中的路径
    • req.method 获取请求行中的请求方法
    • req.headers 获取请求头
  • 形参res
    • 形参res是response的缩写,即响应
    • 做出响应,需要使用 res 对象。
    • statusCode 设置响应状态码,必须在end方法前调用
    • res.setHeader() 设置响应头,比如设置响应体的编码,必须在end方法前调用
    • res.end() 把响应报文(响应行、响应头、响应体)发送给浏览器,通俗的讲就是做出响应。
      • end() 调用,表示做出响应
      • end() 调用后,不能再设置响应状态码和响应头
      • end() 的参数表示响应结果;只能填字符串

浏览器在请求服务器的时候,默认会请求网站根目录下的 /favicon.ico 网站图标,先不要管它。

NPM

npm介绍

npm是管理(下载、卸载、发布)第三方模块的工具。

node(node package manage) node 包管理器。管理node包的工具。

包就是模块,npm这个工具,在安装node的时候就已经安装到你的计算机中了。

命令行中执行:npm -v 可以查看版本号。

npm的作用

npm的作用是:管理node模块的工具。

  • 下载并安装第三方的模块
  • 卸载第三方模块
  • 发布模块
  • 删除已发布的模块

npm 就是一个管理(下载安装、卸载…)第三方模块的工具

本地模块

初始化

安装本地模块,需要使用npm工具初始化

npm init -y
//接着按回车即可
初始化之后会在项目中目录中生成package.json的文件

安装卸载第三方模块命令

淘宝镜像

淘宝前端开发团队对npm网站的模块做了备份,一般国内都会先npm安装淘宝镜像,提高模块下载速度。

//建议在安装第三方模块之前,先执行如下命令(淘宝镜像),只需执行一次即可(以后重启vscode还是电脑,都无需再执行)
npm config set registry https://registry.npm.taobao.org

安装卸载命令

  • 安装命令
npm install 模块名
或简写
npm i 模块名
//一次性安装多个模块
npm i 模块名 模块名
  • 卸载模块
npm uninstall 模块名
npm un 模块名   //简写
npm un 模块名 模块名  //卸载多个

使用第三方模块

和使用内置模块一样,需要使用require() 加载模块

let moment = require('moment')  //moment是一个时间日期的模块

什么是第三方模块

非node自带的模块。也不是自定义的模块。

是别人写的模块,然后发布到npm网站,我们可以使用npm工具来下载安装别人写的模块。

第三方模块,都是在node核心模块的基础之上,封装了一下,实现了很多非常方便快速简洁的方法。

目前,npm网站收录了超过 160 万个第三方模块。

如果你想实现一个功能。那么请搜索第三方模块,没有做不到的事情,只有你搜不到。

全局模块

与本地模块的差异

  • 全局安装的模块,不能通过require() 加载使用
  • 全局安装的模块,一般是命令或者工具。

安装卸载命令

//全局安装命令
npm i 模块名 -g
//或者
npm i -g 模块名

//全局卸载命令
npm un 模块名 -g

//查看全局安装路径
npm root -g

全局安装nodemon模块

npm i nodemon -g
nondemon的作用

代替node命令,启动服务工具,当更改代码之后保存,nodemon会自动重启服务。

  • 运行nodemon,如果报错如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yuQecHqo-1628818076645)(C:/Users/15001/Desktop/学习文件/09-node/Node02/文档/NPM.assets/1585472428055.png)]

  • 解决办法是:
    • 管理员方式,打开命令行(powershell)窗口
    • 执行 set-ExecutionPolicy RemoteSigned;
    • 在出现的选项中,输入 A,回车。即可

全局安装nrm(切换镜像源)

npm i -g nrm  //安装
nrm ls   //查看全部可用的镜像源
npm use taobao  //切换到淘宝镜像
npm use npm     //切换到npm主站

运行 nrm 命令会报错:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PeLRixNi-1628818076646)(file://D:/%E5%89%8D%E7%AB%AF%E8%B5%84%E6%96%99/09-node/Node02/%E6%96%87%E6%A1%A3/NPM.assets/image-20210505194903739.png?lastModify=1628814335)]

解决方法:将上述标注的文件打开,把17行注释,替换为下面的代码:

const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');

片转存中…(img-yuQecHqo-1628818076645)]

  • 解决办法是:
    • 管理员方式,打开命令行(powershell)窗口
    • 执行 set-ExecutionPolicy RemoteSigned;
    • 在出现的选项中,输入 A,回车。即可

全局安装nrm(切换镜像源)

npm i -g nrm  //安装
nrm ls   //查看全部可用的镜像源
npm use taobao  //切换到淘宝镜像
npm use npm     //切换到npm主站

运行 nrm 命令会报错:

[外链图片转存中...(img-PeLRixNi-1628818076646)]

解决方法:将上述标注的文件打开,把17行注释,替换为下面的代码:

const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');

猜你喜欢

转载自blog.csdn.net/weixin_48585264/article/details/119667799