Node.js、数据库、模块化、NPM、Axios

这篇博客介绍了Node.js的基础,包括环境安装、全局作用域成员,重点讲解了Node.js的核心优势——模块化结构CommonJS,以及http模块、URL模块和数据库操作。同时,讨论了NPM的使用,如crypto模块和Axios库在服务端请求中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、初识Node.js

1.基于chrome v8引擎的js运行环境

2.v8引擎:chromejs解析引擎,C++开发,单线程,可独立运行

3.运行环境:①类似虚拟机,提供js在服务端运行的环境

js工具库:扩展了js在服务端的功能

二、环境安装

1.Node.js必须先安装再使用 -- 有很多版本

2.安装方式:①下载包安装:添加到环境变量

版本更新:重新下载安装

NVM:多版本切换

3.查看是否安装成功:node -v ----命令行

4.注意:①安装环境不要出现中文

②添加到环境变量

③查看是否安装成功 : $ node -v

REPL环境

1.类似开发者工具中的console

2.进入REPL环境:打开命令行:node + 回车

3.退出REPL环境:ctrl+c或者process.exit()或.exit 4.执行js文件:node*.jsnode demo(文件默认为``js)`

全局作用域成员

1.global:全局环境 ,类似window

2.globalThis:ES6新增的全局对象,浏览器端指向window,服务端指向global

3.process:获取当前的node进程信息

4.console:node内置的控制台模块,类似客户端的console

5.Buffer:用于处理二进制的数据

Bable

1.ES6转码器:将ES6转为ES5 -- 可以使用ES6编写程序,然后将代码转化为ES5适应老版本浏览器

2.安装:$ npm install --save-dev @babel/core

3.配置文件:.babelrc -- 项目根目录

{
  "presets": [ "@babel/env"], //转码规则
  "plugins": []  //插件
}

4.转码规则:官方提供,可通过npm安装

$ npm install --save-dev @babel/preset-env

5.命令行转码工具:$ npm install --save-dev @babel/cli

$ npx babel es6.js  --  转码之后输出到控制台
$ npx babel es6.js -o es5.js  --  将es6.js文件转码之后写入到es5.js文件
​
npx:npm5之后新增的功能,帮助去调用局部安装的工具

process.stdout.write('\033[0f'); process.stdout.write('\033[2J');

Node.js核心优势

  1. 单线程

  2. 非阻塞式I/O -- 异步编程,错误优先(回调函数的第一个参数是error)

模块化结构CommonJS

1.使用CommonJs规范 -- 运行时加载 ,同步加载

2.Node.js模块分类:①核心模块:平台自带

②第三方模块:包

③文件模块:自己开发的

3.module对象:Node.js内部提供,所有模块都是module的实例

4.导出:exports或module.exports

exports.name = val;
module.exports = {name:val}
​
注意:exports为module.exports别名,导出最终以module.exports为准

5.导入:require

规则一:以:./或../开头的路径以当前文件所在的文件夹开始寻找模块
require("./module.js");  //加载当前目录下的module.js模块
require("./module"); // 省略扩展名则按js文件执行
规则二:以/开头则以系统根目录(当前文件所在的目录)开始寻找模块
require("/module/demo.js"); //加载当前文件所在根目录目录根据路径开始寻找
规则三:不以./或../或/开头
1:以核心模块加载
require("http");
2:从当前目录开始依次向上查找node_modules目录
规则四:路劲是一个文件夹
1.查找文件夹下是否有package.json中main字段指向的文件
require("./path")
2.不存在package.json或者没有main字段,指向index.js

一、模块化结构

1.分类:①内置模块:Node.js系统自带模块 -- require("module")

②第三方模块:别人开发好放到网上,可以直接下载使用

使用步骤1.NPM下载

2.require("module")

③文件模块:自己开发的模块 -- require("./module")

2.核心模块:Http:提供web服务功能

path:处理文件路径的模块

fs:处理文件的模块

url:用于解析URL

queryString:解析URL查询字符串模块

crypto:提供加密解密的模块

util:提供常用函数的集合

child_process:子进程模块

OS:与操作系统交互模块

3.CMS:内容管理系统 (管理员模块、)

OA:办公自动化

CRM:客户关系管理系统

ERP:企业资源计划

二、http模块

1.作用:提供web服务功能

2.方法:http.createSever():创建一个web服务器的方法

http.createServer((request,response)=>{
    //request:用户请求 request.url
    //response:服务器应答
}).listen(端口号);

3.response:由http服务器内部创建的,表示服务器对于request的应答

response.writeHead(状态码[,状态码描述][,头
{key:val;key2:val2}]):响应的头信息
response.setHeader(key,val):设置响应头
response.write(data):响应正文,可以多次响应
response.end([data]):表示响应结束,每一次request都必须有一个end(),end()之后不能再次write()  --  只能有一次

三、URL模块

1.作用:用于网址的处理和解析

2.API:①旧版:只能用于node.js的特定版本

const url = require("url");
const reqUrl = url.parse(urlString);

②新版:与浏览器相同的API:兼容浏览器 -- 推荐

const reqStr = new URL(request.url,baseUrl);

四、路由

1.根据请求的URL和参数(get 和 post)来决定访问的页面和要执行的代码

2.路由规则:

后端: /admin/模块/具体页面
     默认访问:后台首页  --  验证用户是否登录
     /admin/user/register:后台用户注册模块
前台:/模块/具体页面
     默认访问:前台首页  --  http://localhost:8888或http://localhost:8888/index

五、MVC

作用:代码结构化思想

1.ModelM ,模型层 -- 数据处理层

2.View:V,视图层

3.Controller:C,控制器,业务逻辑层

4.单入口:所有的访问都通过同一个文件,一个项目只有一个入口文件

5.多入口:可以通过多个入口访问文件,

项目结构:
    index.js:入口文件
    public:公共资源目录
        -admin:后台资源目录(后台模板的images,css,js等)
            -images,css,js,fonts
        -images:前台的图片目录
        -css:前台的样式目录
        -js:前台的js目录
        -fonts:前台的字体目录
    tpl:模板目录(前台和后台的html页面)
       -admin:后台模板
           -admin:用户目录模块
               index.html:后台用户首页模板
               -add.html:后台用户新增模板
               -edit.html:后台用户编辑模板
       -index.html:前台首页模板
    module:服务端的js目录
        -db:模型层目录
           -db.fun.js:数据库处理文件
        -controller:控制器目录(业务逻辑层)
           -admin:后台控制器目录
               -admin.js:用户模块的控制器(用户模块的业务逻辑)
               -category.js:分类模块的业务逻辑
        -util:通用方法的目录
            -page.fun.js:分页模块
        -init:项目初始化
           -server.js:web服务模块
           -router.js:路由模块

一、fs

1.作用:与文件系统交互 -- 对文件的增、删、改、查

2.方法:fs.readFile(path[,options],(err,data)=>{}):异步读取文件内容

注意:路径为绝对路径

二、path模块

1.作用:用于处理文件和目录的路径(根据平台规范文件或文件夹的路径)

2.方法:path.join([...paths]):按照特定平台使用分隔符将给定的路径规范化生成一个新的路径(将多个路径片段拼接成一个完整路径)

path.basename(path[,ext]):获取path的最后一部分,如果ext不省略,则会被忽略

(文件名及扩展名)

path.dirname(path):截取path目录部分(返回路径中的目录)

path.extname():返回扩展名

全局变量:

3.__dirname:返回当前文件所在的目录(不包含文件名) -- 全局变量

4.__filename:返回当前文件所在的具体路径(包含文件名) -- 全局变量

三、静态资源加载

1.MIME Type:媒体类型(内容类型),与文件后缀对应,用来给媒体资源设置正确的类型以此正常显示资源

1.设置正确的MIME Type

2.读取 -》 返回(设置Content-Type

         .html .htm  --  text/html
         .jpg        --  image/jpeg
         .jpeg       --  image/jpeg
         .png        --  image/png
         .gif        --  image/gif
         .css        --  text/css
         .js         --  text/javascript
         .mp3        --  audio/x-mpeg
         .mp4        --  video/mp4
         .json       --  application/json
         .gif        --  image/gif

获取请求数据

1.get请求:数据通过URL提交,当通过URL API处理后,请求字符串存储search中,请求数据对象在searchParams

1.旧版
const queryString = require("queryString"); //查询字符串处理模块
let data = queryString.parse(url.search); //返回键值对集合
​
//let reqUrl = url.parse(req.url) //旧版URL  API
//let params = queryString.parse(reqUrl.search.slice(0,len1)
2.新版
2.1:如果使用新版的URL API ,那么直接就是url.searchParams
2.2:如果是旧版的URL API
    let data = new URLSearchParams(url.search);
 data.append(k,v):追加键值对,同名的会保留
 data.set(k,v):设置键、值,同名的会覆盖

2.post请求: request中没有专门用于处理post请求的属性,只能通过监听事件来获取数据

通过请求体来传递参数

let data = "";
request.on("data",chunk=>data+=chunk;) //数据传递中 data就是传递的参数
request.on("end",()=>data); //数据传输完毕触发end   data:x=1&y=2

MySql数据库

1.作用:存储数据的仓库

2.分类:mysql,oracle,Sql Server MongoDB...

3.使用:安装对应的数据库 -》 开启服务

4.工具:Navicat

1.创建连接:主机名:数据库服务器所在的主机名或ip  -- localhost或127.0.0.1
           端口号:3306
           用户名:登录数据库时的账号  --  root
           密码:登录数据库时的密码 --  root
2.创建数据库:数据库名,编码
登录数据库 - 具体数据库名 - 表 - 字段
3.创建表:
  1.字段名:数据存储的名字
  2.类型:字符串:char:最大长度255,定长,
                varchar:最大长度为255,变长,指定长度
                text:大文本
  3.主键:数据的唯一标识,设置成一个递增的整数,不能重复

表:

字段:名字,类型(类似js数据类型),默认值,是否为空,是否是主键
主键:数据的唯一性标识,整型,从1开始,依次递增,不会被覆盖
类型:字符串:char:最大长度255,定长,
           varchar:最大长度为255,变长,指定长度
           text:大文本

SQL语句

1.结构化查询语言,用来对数据库进行CURD -- 跨平台、跨语言

2.课程内容:对表内容的CURD

 mysql -u 数据库名 -p; 打开数据库
 show databases; -- 显示所有的数据库
 use h2201; -- 进入某个数据库
 show table;-- 显示某个表
 SELECT * FROM `admin`;

新增(INSERT)

INSERT INTO `table` (`name1`,`name2`...) VALUES (val1,val2...)  --  给指定的字段添加指定的值(字段先后顺序无瓜)

INSERT INTO `table` VALUES(val1,val2...); -- 直接添加一条数据(省略字段名,值按照字段在表中的顺序一一对应,包括所有字段)

注意:字段和值按顺序一一对应  --  个数,类型,顺序
      字符串类型的值必须加引号(单双引号)

删除(DELETE)

DELETE FROM `table`; -- 删除所有表的数据
DELETE FROM `table` WHERE condition; --  按条件删除满足的数据

修改(UPDATE)

UPDATE `table` SET `name`="val",`name2`="val2" -- 将表中所有的数据name设置为val1,name2设置为val2
UPDATE `table` SET `name`="val",`name2`="val2" WHERE condition -- 按条件修改数据

查询(SELECT)

SELECT * FROM `table`  --  查询table的所有字段所有数据
SELECT * FROM `table` WHERE condition; -- 按条件查询数据
SELECT * FROM `table` WHERE `name`="val" -- 查找所有name为val的数据
SELECT * FROM `table` WHERE `name` LIKE "%val%" -- 查找所有name中包含val的数据(模糊查询)
SELECT * FROM `table` WHERE condition AND condition2 -- 查找所有满足condition和condition2的数据
SELECT * FROM `table` WHERE condition OR condition2 -- 查找所有满足condition或condition2的数据
SELECT * FROM `table` WHERE `name` IN ("val1","val2"...)  --  查找所有name为val1和val2的数据
SELECT * FROM `table` ORDER BY `name` ASC/DESC  -- 数据按name升序(ASC,默认)/降序(DESC)
SELECT * FROM `table` LIMIT [start=0,]len; -- 查询所有满足条件从start开始,len条数据
SELECT `name`,`name2` AS `names` FROM `table`  --  查询特定字段+字段别名

SELECT `name`,`name2` AS `names` FROM `table` [WHERE condition] [ORDER BY `name` [ASC/DESC]] [LIMIT [offset=0,]len]

NPM

1.Node.js包管理器,随着Node.js一起安装

2.包:第三方模块,别人开发好某些功能,可以直接下载使用

3.常用NPM命令

$npm -v:查看当前npm版本
$npm install package  --  将包下载到当前目录并写入生产环境dependiencied
$npm install package --save/-S; 作用同上
$npm install package --save-dev/-D; 将包下载到本都并写入到devDenpendencies
$npm install package -g   --   将包作为全局包下载(全局工具)
$npm root -g  --  查看全局安装包路径
$npm init --  项目初始化(生成package.json package-lock.json)
$npm uninstall package -g/-s/-d : 卸载包
$npm config ls -l -- 查看npm配置
$npm get registry -- 获取当前npm源地址
$npm set registry https://registry.npm.taobao.org  :设置新的源
$npm install --  

packagae.json:项目配置文件
{
     "main":"index.js", //入口文件
     "dependencies":{}  //生产环境依赖
     "devDependencies":{}  //开发环境依赖
}

4.官网:package - npm

5.其他工具:yarn,pnpm,cnpm

导入第三方包:const package = require("package")

crypto

UPDATE admin SET pwd= md5("123456") WHERE uid = 2;

1.作用:提供了加密功能,其中包括了用于OpenSSl散列、HMAC、加密、解密、签名、以及验证的函数的一整套封装

  1. md5加密: crypto.createHash("md5").update(data.get("pwd")).digest("hex")

3.数据库加密:

UPDATE `admin` SET `pwd`=md5("password") WHERE condition

模板引擎

1.作用:给模板页传递服务端的数据,并渲染在页面中

2.分类:art-template,jade,ejs

3.`art-template使用: 同时支持客户端和服务端

1.安装art-template:npm install art-template --save
2.引入art-template:const template = require("art-template")
3.加载模板:let html = template(模板的绝对路径,{key:val}(参数))
4.响应给客户端:
res.writeHead(200,{"Content-Type":"text/html";charset=utf-8})
res.end(html);

客户端:变量输出

客户端COOKIE

1.是浏览器的一种能力,面向客户端及服务端开放

2.浏览器端的cookie属于document

3.创建cookie

document.cookie = "name=val;max-age=10;..."
expires:过期时间 -- 日期格式
max-age:最大保存时间 -- 秒
默认为保存时间为session:关闭浏览器(页面)即销毁
domain:当前cookie应用的域名范围 -- 默认为当前域名
path:当前cookie应用的文件夹范围 -- 默认为当前文件夹,"/"表示所有文件夹都可以访问

4.读取cookiedocument.cookie -- 字符串(处理)

5.销毁cookie

document.cookie = "name=;max-age=-1";

6.注意:1.cookie运行在服务器环境中 - 不能以本地文件的形式访问

2.cookie保存在客户端,具体与浏览器设置有关

3.cookie通过Headers传递

4.cookie保存的数据大小为5KB左右,具体与浏览器有关

5.cookie兼容性好,所有浏览器都支持

6.安全性较低

服务端cookie

1.设置服务端cookie

response.setHeader("Set-Cookie",["name=val,path=/,max-age=60,httpOnly...","name2=val2,path=/..."]);  -- 原生写法
httpOnly:设置服务端的cookie是否能被客户端访问,

2.使用cookie模块:①序列化cookie的值为一个cookie Header的字符串

②将获取的cookie Header 字符串转换为键值对对象

1.安装cookie:npm install cookie -s
2.导入cookie:const cookie = require("cookie");

3.cookie获取:

1.客户端:
document.cookie => name=val; name2=val2;...
let cookies = Object.assign({},...document.cookie.split(";").map(v=>{
    let tmp = v.split("=") //[name,val]
}))

art-template

1.模板中遍历:

1.默认值为$value,索引为$key
{{each list}}
	索引:{{$index}}
	值:{{$value}}
{{/each}}
2.自定义索引和值的变量名
{{each list val key}}
	索引:{{key}}
	值:{{val}}
{{/each}}

Axios

1.是一个基于 PromiseHTTP 库,可以用在浏览器和 Node.js

2.安装:1.使用npmnpm install axios -s

2.使用<script>标签引入

3.注意:引入成功,会注册一个全局axios对象

4.特点:①可用于客户端:使用promise发送http请求

②也可用于服务端:使用node.js发送请求

③拦截式及响应

④自动转换json格式

5.安装:①使用Axios包:安装-》导入

②使用axios.min.js文件:<script>标签

6.注意:导入axios后,axios则会成为一个全局对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值