6.在根目录新建public文件夹,然后在这个public文件夹里面再创建img,css,js等公开的静态资源

   日期:2024-12-27    作者:yangyong1205 移动:http://ljhr2012.riyuangf.com/mobile/quote/58168.html

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。

6.在根目录新建public文件夹,然后在这个public文件夹里面再创建img,css,js等公开的静态资源

1.Node.js不是一门语言,不是库,不是框架。而是一个javascript运行环境。
简单来讲就是Node.js可以解析和执行javascript代码,一起只有浏览器可以解析执行javascript代码,也就是说现在的javascript可以完全脱离浏览器来运行,一切都归功于Node.js。
1)浏览器中的javascript包含EcmaScript(基本语法,if,var,function,object,Array,DOM,BOM
2)Node.js中的javascript中没有DOM,BOM,有EcmaScript。Node在javascript执行环境中,为javascript提供了一些服务器级别的操作API:如文件读写,网络服务的构建,网络通信,http服务器等处理

2.Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
代码只是具有特定合适的字符串而已,引擎可以认识它,引擎可以帮助你去解析执行。
Google Chrome 的v8引擎是目前工人的解析执行javascript代码最快的。Node.js的作者把Google Chrome 中的v8引擎移植了出来,开发了一个独立的javascript运行时环境

3.Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
后面慢慢就会明白。

4.Node.js 的包管理器 npm,是全球最大的开源库生态系统。绝大多数javascript相关的包都存放在npm 上,这样做的目的就是为了让开发人员更方便的去下载使用。

1.web服务器后台
2.命令行工具:npm(node) , git(c语言) ,hexo(node
3.对于前端开发工程师来讲,接触node最多的是它的命令行工具。自己写的少,主要是使用别人第三方开发的。如webpack,gulp,npm…

1.HTML
2.CSS
3.Javascript
4.简单的命令行操作

  • cd
  • dir
  • ls
  • mkdir
  • rm
    5.具有服务端的开发经验更佳

1.B/S变成模型

  • Browser-Server
  • back-end
  • 任何服务端技术这种BS变成模型都是一样,和语言无关
  • Node只是作为我们学习BS编程模型的一个工具而已

2.模块化编程

  • RequireJS
  • SeaJS
  • @import(‘文件路径’),以前认知的Javascript只能通过script标签加载。在Node中可以像一样来引用加载Javascript脚本文件

3.Node常用API

4.异步编程

  • 回调函数
  • Promise
  • async
  • generator

5.Express WEB开发框架

6.Ecmascript 6
她只是一个新语法,会在课程中穿插讲

7.学习Node不仅会帮助大家打开服务端盒子,同时会帮助你学习以后的前端高级内容

  • vue.js
  • react.js
  • angular

1.创建编写Javascript脚本文件
2.打开终端,定位到脚本文件所属目录
3.输入执行脚本对应的文件

1)在Node中,没有BOM和DOM

在Node中,采用EcmaScript进行编码,没有BOM和DOM,和浏览器中的JavaScript不一样。所以像下面这样打印会报错。

 

2)Node 中读取文件fs.readFile

浏览器中的 JavaScript 是没有文件操作的能力的,但是 Node 中的 JavaScript 具有文件操作的能力。
fs 是 file-system 的简写,就是文件系统的意思,在 Node 中如果想要进行文件操作,就必须引入 fs 这个核心模块,在 fs 这个核心模块中,就提供了所有的文件操作相关的 API。例如:fs.readFile 就是用来读取文件的。

 
 

3)浏览器是不认识node代码的

像上面的require(‘fs’)这些代码,浏览器都是没法识别的。

4)Node中写文件fs.writeFile

  • fs.writeFile会生成新的文件
  • fs.readdir会读取文件夹中的目录列表中的文件名和目录名
 
 

5)创建web服务器

5-1 最基础的发送请求
 
 
5-2 Request 请求对象和Response 响应对象

①request 请求事件处理函数,需要接收两个参数:Request 和Response

  • Request 请求对象
    请求对象可以用来获取客户端的一些请求信息,例如请求路径
  • Response 响应对象
    响应对象可以用来给客户端发送响应消息

②response 对象有一个方法:response .write 可以用来给客户端发送响应数据
注意: write 可以使用多次,但是最后一定要使用 response .end 来结束响应,否则客户端会一直等待

③ 上面的方式比较麻烦,推荐使用更简单的方式,直接 end 的同时发送响应数据
res.end(‘hello nodejs’)

④ req.url 获取到的是端口号之后的那一部分路径,也就是说所有的 url 都是以 / 开头的

⑤响应内容只能是二进制数据或者字符串
如果是数字,对象,数组, 布尔值等都不行,都会报错。如果是数组可以通过JSON.stringify()转一下

Node为Javascript提供了很多服务器级别的API,这些API绝大多数被包装到了一个具名的核心模块中了。例如文件操作的核心模块,http服务构建的模块,路径操作模块,操作系统信息模块等。
后面说到的模块就是指一个核心模块,你就要马上想到如果使用它,就必须
下面只是一部分,具体使用可以去官网api查找

 
 

require 是一个方法,它的作用就是用来加载模块的。
在 Node 中,模块有三种
1)具名的核心模块,例如 fs、http
2)用户自己编写的文件模块
① 相对路径必须加 https://blog.csdn.net/qq_39928481/article/details/,不能省略,否则报错
②可以省略后缀名.js
③没有全局作用域,只有模块作用域。也就是说外部访问不到内部,内部也访问不到外部,默认都是封闭的。
④模块作用域中如何让模块与模块之间进行通信呢?通过require方法的exports 对象
require 方法有两个作用

  1. 加载文件模块并执行里面的代码
  2. 拿到被加载文件模块导出的接口对象exports(在每个文件模块中都提供了这个exports对象
    exports 默认是一个空对象, 我们要做的就是把所有需要被外部访问的成员挂载到这个 exports 对象中
  • ip地址用来定位计算机
  • 端口号用来定位具体的应用程序
  • 一切需要联网通信的软件都会占用一个端口号
  • 端口号的范围从0 - 65536之间
  • 在计算机中有一些默认的端口号,最好不要去使用,例如http服务的80
  • 开发中使用一些简单记忆的就可以了,例如3000、5000等没有什么含义,我们都可以使用
  • 可以开启多个服务,但一定要确保端口号不同

服务端默认发送的数据是 utf8 编码的内容。但是中文操作系统浏览器默认的是 gbk的编码,因为他不知道服务端默认发送的是 utf8 的编码,而他只会按照当前操作系统的默认编码去解析,所以导致中文乱码。

解决方法
查询对照表地址(根据文件后缀查找:content-type对照表
正确的告诉浏览器我给你发送的内容是什么编码的。也就是说 在 http 协议中,通过Content-Type 就是用来告知对方发送的数据内容类型

  • 纯文本解析(utf-8编码:res.setHeader(‘Content-Type’, ‘text/plain; charset=utf-8’)
  • html解析(utf-8编码:res.setHeader(‘Content-Type’, ‘text/html; charset=utf-8’)
  • 图片解析.jpeg(不需要指定编码,只有字符数据指定编码: res.setHeader(‘Content-Type’, ‘image/jpeg’)
  • 图片解析.png(不需要指定编码,只有字符数据指定编码)res.setHeader(‘Content-type’,‘image/png’)
 
 
 

为了约定大家的代码风格,所以在社区中诞生了一些比较规范的代码风格规范:dnsajkndkjsabnjkdnjksandjknsajkdnjkasnjkdnjksandjknsajkdnjksajkdnas

  • JavaScript Standard Style
  • Airbnb JavaScript Style

当你采用了无分号的代码风格的时候,只需要注意以下情况就不会有上面的问题了
当一行代码是以
(
[
开头的时候,则在前面补上一个分号用以避免一些语法解析错误。所以你会发现在一些第三方的代码中能看到一上来就以一个 ; 开头。
结论
无论你的代码是否有分号,都建议如果一行代码是以 (、[、` 开头的,则最好都在其前面补上一个分号。有些人也喜欢玩儿一些花哨的东西,例如可以使用 ! ~ 等。

 
 

Apache是世界使用排名第一的Web服务器软件。

读取文件夹目录
var fs=require(‘fs’)
fs.readdir(‘文件夹路径’,function(){ })

 
 

模板引擎官网

1)浏览器 中使用

 
 

2)在node中使用模板引擎

在 Node 中使用 art-template 模板引擎,模板引起最早就是诞生于服务器领域,后来才发展到了前端。

 
 
 

1)客户端渲染

第一次请求拿的是页面,第二次请求拿到的是动态数据。
客户端第一次收到服务端响应的字符串以后,从上到下依次解析,在解析过程中,如果发现ajax请求,则再次发起新的请求。

2)服务端渲染

对于服务端渲染来讲,只请求一次。服务端渲染,响应的就是最终的结果,客户端不需要再做任何处理。服务端自己在把模板发送给客户端之前据通过template.render(模板字符串,解析替换对象)把模板解析好了。

3)区别

客户端异步渲染不利于 SEO 搜索引擎优化,是很难被爬虫抓取到的;而服务端渲染是可以被爬虫抓取到的。
所以你会发现真正的网站既不是纯异步也不是纯服务端渲染出来的,而是两者结合来做的。 例如京东的商品列表就采用的是服务端渲染,目的了为了 SEO 搜索引擎优化。 而它的商品评论列表为了用户体验,而且也不需要 SEO 优化,所以采用是客户端渲染

a.html的页面

 

404.html

 

a.js

 
 
 

a.js

 

a.html

 
 

使用 url.parse 方法将路径解析为一个方便操作的对象,第二个参数为 true 表示直接将查询字符串转为一个对象(通过 query 属性来访问

 
 

表单提交分为
1. 默认的提交行为
2. 表单异步提交
action 就是表单提交的地址,说白了就是请求的 url 地址
method 请求方法 get 和 post

所以如果路径带参数,直接通过req.url来获取路由就获取不到了。可以通过下面的方法来获取?前面的路由路径。

 
 

如何通过服务器让客户端重定向
1.状态码设置为 302 临时重定向
statusCode
2.在响应头中通过 Location 告诉客户端往哪儿重定向
setHeader
如果客户端发现收到服务器的响应的状态码是 302 就会自动去响应头中找 Location ,然后对该地址发起新的请求
所以你就能看到客户端自动跳转了

  • 301 永久重定向 浏览器会记住, 301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了,搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址
    - a.com b.com
    - a 浏览器不会请求 a 了
    - 直接去跳到 b 了
    * 302 临时重定向 浏览器不记忆, 302表示旧地址A的资源还在(仍然可以访问,这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
    - a.com b.com
    - a.com 还会请求 a
    - a 告诉浏览器你往 b
    301跳转对查找引擎是一种对照驯良的跳转编制,也是查找引擎能够遭遇的跳转编制,它告诉查找引擎,这个地址弃用了,永远转向一个新地址,可以转移新域名的权重。
    而302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。

入口b.html

 

输入文字,跳转到/pinglun路径,然后通过a.js进行页面重定向到/路径,也就是a.html的页面。

a.js

 

a.html

 
 
 

在终端输入 然后直接回车
在任意路径下,你可以使用任意的核心模块,而不用require,只有在文件中需要使用require

使用Node编写应用程序主要就是在使用

  • EcmsScript 语言
    • 和浏览器不一样,在Node中没有BOM,DOM
  • 核心模块
    • 文件操作的fs
    • http服务的http
    • url路径操作模块
    • path路径处理模块
    • os操作系统信息
  • 第三方模块
    • art-template
    • 必须通过npm下载才可以使用
  • 咱们自己写的模块
    • 自己创建的文件
  • 文件作用域
  • 通信规则(加载和导出

在Node中的Javascript还有一个很重要的概念,模块系统

  • 模块作用域
  • 使用方法用来加载模块
  • 使用接口对象来到出模块中的成员

1)加载

语法

 

两个作用

  • 执行被加载模块中的代码
  • 得到被加载模块中的导出接口对象

2)导出

  • node中是模块作用域,默认文件中所有成员只在当前文件模块有效
  • 对于希望可以被其他模块访问的成员,我们就需要把这些公开的成员都挂在到接口对象中就可以了

导出多个成员(必须在对象中

 

导出单个成员(拿到的就是:函数、字符串

 

以下情况会覆盖

 

也可以这样来导入多个成员

 
 
 
 

3)exports和module.exports的区别

  • 在 Node 中,每个模块内部都有一个自己的 module 对象,该 module 对象中有一个成员叫:exports 。exports 也是一个对象, 也就是说如果你需要对外导出成员,只需要把导出的成员挂载到 module.exports 中。但由于每次导出接口成员的时候都通过 module.exports.xxx = xxx 的方式很麻烦,点儿的太多了。所以,Node 为了简化你的操作,专门提供了一个变量:exports 等于 module.exports。

  • 如果给 exports 重新赋值会断开和 module.exports 之间的引用,同理,给 module.exports 重新赋值也会断开。所以 不要使用 , 因为每个模块最终向外 的是 , 而 只是 的一个引用, 所以即便你为 重新赋值,也不会影响 。

 
  • 真正去使用的时候
    导出多个成员:exports.xxx = xxx
    或者:module.exports = { }
    导出单个成员:module.exports

  • 总之,谁来 require 我,谁就得到 module.exports。默认在代码的最后有一句:一定要记住,最后 return 的是 module.exports,不是 exports。所以你给 exports 重新赋值不管用,最后只看return module.exports。

4)require方法加载规则

①优先从缓存加载
② require标识符分析
  • 路径形式的模块
    https://blog.csdn.net/qq_39928481/article/details/ 当前目录,不可省略
    …/ 上一级目录,不可省略
    .js 后缀名可以省略
 
  • 核心模块的本质也是文件
    核心模块文件已经被编译到了二进制文件中了,我们只需要按照名字来加载就可以了
 
  • 第三方模块
    凡是第三方模块都必须通过 npm 来下载,使用的时候就可以通过 require(‘包名’) 的方式来进行加载才可以使用。不可能有任何一个第三方包和核心模块的名字是一样的

如果发现了既不是核心模块、也不是路径形式的模块,如何加载
先找到当前文件所处目录中的 node_modules 目录
node_modules/art-template
node_modules/art-template/package.json 文件
node_modules/art-template/package.json 文件中的 main 属性
main 属性中就记录了 art-template 的入口模块
然后加载使用这个第三方包
实际上最终加载的还是文件

如果 package.json 文件不存在或者 main 指定的入口模块是也没有怎么办
node 会自动找该目录下的 index.js,也就是说 index.js 会作为一个默认备选项。
但如果以上所有任何一个条件都不成立,则会进入上一级目录中的 node_modules 目录查找。如果上一级还没有,则继续往上上一级查找
。。。
如果直到当前磁盘根目录还找不到,最后报错
// can not find module xxx
// var template = require(‘art-template’)

注意:我们一个项目有且只有一个 node_modules,放在项目根目录中,这样的话项目中所有的子目录中的代码都可以加载到第三方包,不会出现有多个 node_modules

node package manager

1)npm 网站

npmjs.com

2)npm 命令行工具

npm 的第二层含义就是一个命令行工具,只要你安装了node就已经安装了npm。
查看npm 版本,在命令行输入

 

升级npm (自己升级自己

 

3)常用命令

  • npm init
    • npm init -y 可以跳过向导,快速生成
  • npm install
    • 一次性把dependencies选项中的依赖全部安装
    • 简写:npm i
  • npm install 包名
    • 只下载
    • 简写:npm i 包名
  • npm install --save 包名
    • 下载并且保存依赖项(package.json文件中的dependencies选项
    • 简写:npm i -S 包名
  • npm uninstall 包名
    • 只删除,如果有依赖项会依然保存
    • 简写:npm un 包名
  • npm uninstall --save 包名
    • 删除的同时也会把依赖信息也去除
    • 简写:npm un -S 包名
  • npm --help
    • 查看使用帮助
  • npm 命令 --help
    • 查看指定命令的使用帮助
    • 例如:我忘记了uninstall命令的简写,这个时候,可以输入来查看使用帮助

4)解决npm 被墙问题

npm 存储包文件的服务器在国外,有时候会被墙,速度很慢,所以我们需要解决这个问题。
http://npm.taobao.org/ 淘宝的开发团队把npm 在国内做了一个备份。

安装淘宝的npm

 

接下来你安装包的时候把之前的替换成
举个例子

 

如果不想安装又想使用淘宝的服务器来下载

 

但是每一次手动这样加参数很麻烦,所以我们可以把这个选项加入配置文件中

 

只要经过了上面命令的配置,则你以后所有的都会默认通过淘宝的服务器来安装依赖

 
 
 

1)安装

 

2)基础功能

  • 在 Express 中可以直接 req.query 来获取查询字符串参数
  • 在 Express 中,开放资源通过.use 指定公开目录,然后直接通过 /public/xx 的方式访问 public 目录中的所有资源了
 

3) 文件操作路径和模块路径

  • 文件操作路径
 
  • 模块操作路径
 
 

这里可以使用一个第三方的命令行工具来帮我们解决频繁修改代码重启服务器的问题。是一个基于Node.js开发的一个第三方命令行工具,我们使用的时候需要独立安装。

 

安装完毕之后,使用

 

只要是通过启动的服务,则他会监视你的文件变化,当文件发生变化的时候,自动帮你启动服务器。

 
 
 

1)app.use有三种写法,写法不同,含义不同

第一种:以 /public/ 开头(推荐

 
 
 
 
 
 

2)示例

如果引入node_module资源的时候,也需要把node_module作为静态资源引入(或者图片需要引入也需要把这个图片作为静态资源引入
app.js

 

index.html

 
 

art-template和express结合使用,官网API

1)安装

 

2)配置

第一个参数表示,当渲染以 .html结尾的文件的时候,使用 art-template 模板引擎。
express-art-template 是专门用来在 Express 中把 art-template 整合到 Express 中,也就是说express-art-template 依赖了 art-template。所以虽然我们这里不需要加载 art-template 但是也必须安装。

 

3)使用

  • render 模板渲染
    Express 为 Response 相应对象提供了一个方法:render。这个render 方法默认是不可以使用,但是如果配置了art-template模板引擎就可以使用了。
    他的第一个参数默认会去项目中的 views 目录查找该模板文件,因为开发人员有个约定就是 把所有的视图文件都放到 views 目录中
 
 
 

如果想要修改默认的 views 目录,则可以

 
  • 重定向
 
 

Express内置了一个API,可以直接通过来获取

 
 

在Express中没有内置获取表单POST请求体的API,这里我们需要使用一个第三方包(中间件

1)安装

 

2)配置

 

3)使用

 

4)示例post请求

从login.html页面触发post请求的方法

 
 

1)readFile读取文件,转utf-8的两种方式

readFile的第二个参数是可选的,传入utf8是为了告诉他读取文件的时候直接按照utf-8的编码转成我们能认识的字符
除了这样转,我们还可以通过data.toString()的方式
app.js

 

db.json

 

404.html

 
 

2)路由模块的提取

第一种方法(推荐
Express专门提供了一种更好的方式专门用来包装路由
router.js

 

app.js

 

第二种方法(原生写法
app.js

 

rouer.js

 

3)回调函数(路由和js逻辑的嵌套写法

示例疑问
如何取到方法里面异步函数的值

 

解决方法
回调函数:获取异步操作的结果

 
1.示例:获取学生列表数据的封装

router.js

 

students.js

 
2.示例:ajax的get请求封装
 

4)关于javascript的模块化问题

因为js天生不支持模块化。所以使用CommonJs、AMD、CMD、UMD、es6的Modules等解决js的模块化问题。

CommonJs:在Node环境中对js进行了特殊的模块化处理
如何在浏览器环境中也可以像在Node中的模块一样进行编程
①标签进行引用加载
②AMD:require.js第三方库
③CMD:sea.js第三方库

无论CommonJs、AMD、CMD、UMD、es6的Modules官方规范,都是为了解决js问题。
CommonJs、AMD、CMD都是民间搞出来的;es6的Modules是官方规范定义的
官方看民间都是乱搞,开发人员为了在不同的环境使用不同的js模块化解决方案,所以Ecmascript在2015年发布了Ecmascript 2016官方标准,其中就包含了官方对ja模块化的支持,也就是说语言天生就支持了。但是虽然标准以及发布了,但是很多js运行环境将还不支持。
Node也是只在8.5版本之后才对Ecmascript 6 module进行了支持,后面学vue的时候去学习。

5)package.json和package-lock.json

  • 这个文件是npm 5以后,当你安装包的时候就会生成或者更新。
  • npm 5以后的版本安装包不需要加参数,它会自动保存依赖信息
  • 的作用
    - 提高下载速度。 这个文件会自动保存中所有包的信息(版本,下载地址,这样的话重新的时候速度就可以提升
    - 锁定版本。这个是用来锁定版本。如果没有这个文件的话,重新的时候会下载最新的版本。但如果哟这个文件的话就会锁定这个版本,防止自动更新升级
  • 可以有多个数据库
  • 一个数据库可以有多个集合(在mysql中就是表
  • 一个集合中可以有多个文档(表内容,表记录
  • 文档结构很灵活,没有任何限制。不需要像MySql一样先创建数据库,表,设计表结构。只需要在插入数据库的时候,指定哪个数据库哪个集合就可以了。一切都是MongoDB自动完成

1)关系型数据库

  • 所有的关系型数据库都是要通过语言来操作的,并且在操作之前都是需要设计表结构的。表就是关系,或者说表与表之间存在关系。
  • 数据表还支持约束
    • 唯一的
    • 主键
    • 默认值
    • 非空

2)非关系型数据库

非关系型数据库都非常灵活,有的就是key-value对儿。MongoDB是长得最像关系型数据库的非关系型数据库,他不需要设计表结构,也就是说你可以任意的往里面存数据,没有结构这么一说。

  • 数据库 ->数据库
  • 数据表 ->集合(数组
  • 表记录->文档对象

1)下载

2)安装

3)配置环境变量

  • 如果想要修改默认的数据存储目录,可以

  •  
     
    
    • 连接
      该命令默认连接本机的MongoDB服务
     
    
    • 退出
      在已经连接的状态下输入退出连接
     
     
    
    • 查看当前操作的数据库
      默认连接上的数据库会是test,但为什么 看不到test数据库呢?因为test里面没有数据

    1)使用官方的包来操作(不推荐)
    https://github.com/mongodb/node-mongodb-native

    2)使用第三方来操作MongoDB数据库
    第三方包:基于Mongo官方的包再一次做了封装
    网址:http://mongoosejs.com/

    • 官网:http://mongoosejs.com/
    • 官方指南:http://mongoosejs/docs/guide.html
    • 官方API文档:http://mongoosejs.com/docs/api.html

    1)安装

     
    

    示例体验
    mongoDB是动态的,非常灵活,只需要在代码中设计你的数据库就可以了。mongoose这个包就可以让你的设计编写过程变得非常简单

     
    

    上面写了连接的是test数据库,那我们查一下看看这数据没有添加上去

    2)官方API

    ①设计Schema发布Model

    第一步:连接数据库。如果指定连接的数据库不需要存在,当你插入第一条数据之后就会自动被创建出来
    第二步: 设计文档结构(表结构,字段名称就是表结构中的属性名称,约束的目的是为了保证数据的完整性,不要有脏数据
    第三步:将文档结构发布为模型。 mongoose.model 方法就是用来将一个架构发布为 model
    - 第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称, mongoose 会自动将大写名词的字符串生成 小写复数 的集合名 称。例如这里的 User 最终会变为 users 集合名称。
    - 第二个参数:架构 Schema
    返回值:模型构造函数

     
    
    ②增加数据
     
     
    
    ③查询数据
    • 查询所有数据
     
     
    
    • 按条件查询所有
      find的第一个参数:以对象的形式传参
     
    
    • 查询某种条件的第一条数据
      不加参数就是所有数据的第一条,加上就是查询后的数据的第一条
     
    
    ④删除数据

    remove的第一个参数就是删除的条件

     
     
    
    ⑤修改数据(更新数据

    :根据id去修改。
    第一个参数是id,第二个参数是修改后的字段

     
     
    

    3)之前的示例进行修改

    ①修改students.js

    之前的封装的students.js的方法现在使用数据库就要他进行改造。
    之前的students.js

     
    

    使用MongooseAPI的students.js

     
    
    ②修改routers.js
    1. 查询所有数据
      这个是查询的方法,名字一致的话就不需要修改代码
     
    
    1. 添加按钮处理
      是Mongoose里保存的API。new一个实例化对象,然后.save回调方法。
     
    
    1. 编辑按钮获取单条数据信息
     
    
    1. 编辑按钮更新功能
      三个参数,第一个是id,第二个是修改后的内容,第三个参数是回调
     
    
    1. 删除功能
     
     
    

    一般查找Node相关的API,直接在npm官网上搜索相关知识点,如:mysql

    在不同操作系统当中,路径分隔符是不一样的
    在windows里面的路径分隔符是反斜杠,如下,如果你要用字符串表示,需要两个反斜杠表示一个反斜杠。因为反斜杠一般需要转义
    在Lunix或者苹果的操作系统当中,他们的路径分隔符是正斜杠。正斜杠如果用字符串来表示正好是可以的
    所以在node中虽然写的是正斜杠,但交给操作系统处理的时候,要把正斜杠转成两个反斜杠

     
    

    补充:模块中的路径标识和这里的路径没关系,不受影响(相对于文件模块

     
     
     
    

     
     
     
     
    
     
    

    那么.html页面就可以直接渲染了

    文件里面加上这一个配置的目的是为了防止后面views文件夹的名字会修改,那么到时候直接修改这个配置就可以了,因为默认是就是在这目录,所以现在加不加都可以。

    art-template官网地址

    1)对于公共的头部和尾部,可以用的形式引入在根文件里面

    创建一个header.html,里面写头部的内容

     
    

    公共的页面代码

     
     
    
    • 创建一个新的文件叫
    • 将index.html的内容复制到文件里面,并且挖一个坑
     
    
    • 然后在页面继承
     
     
    
    • 页面进行填坑
     
     
    


    这样的话所有页面,只要继承了这个模板页就可以使用bootstrap和jquery

     
     
    

    再留两个坑(样式坑和脚本坑)

     
    

     
     
     
     
    

    如果路由内容太多,可以根据路由内容提取,如:注册,登录,退出都是跟服务器进行会话,可以叫。把它添加到router文件夹里面。
    1)在根目录新建一个

     
    

    然后把router.js引入到app.js中,并且挂载到app上

     
     
    

    只要加入了这个配置,则在req请求对上多出来一个属性:body,也就是说你就可以直接通过req.body来获取表单POST请求体数据了

     
     
    

    model文件夹里面根据需求命名不同的数据模型,这里先创建一个user.js 指定用户的数据模型

     
     
    
    • $or 是MongoDB里面的语法,表示或者的关系,满足其中条件之一即可
    • 这个是创建一个新的数据保存入数据库
    • 这个json是express里面的,可以把对象自动转换成json格式,相当于JSON.stringify()的功能
    • md5 加密,不可逆,有时候为了避免数据库信息泄露被破解密码,二次加密
      安装
      引入
     
    

    优化改造

    • async和await一起使用
    • 捕获异常
    • Cookie 可以用来保存一些不太敏感的数据。但是不能用来保存用户登陆状态。
    • Session服务器给你的,所以这就很安全了,不太容易伪造出来。 这个时候客户端就可以包一些敏感的数据保存到服务端,客户端只需要拿着这把钥匙就可以了。

    2)在 Express 这个框架中,默认不支持 Session 和 Cookie
    但是我们可以使用第三方中间件:express-session 来解决
    1.安装

    2. 配置 (一定要在 app.use(router) 之前)

     
    
    1. 使用
      当把这个插件配置好之后,我们就可以通过 req.session 来发访问和设置 Session 成员了
      添加 Session 数据
      访问 Session 数据

    在注册的接口中,注册成功就是用Session 记录

     
    

    然后在路由中,把需要展示页面的路由方法里用session的值去渲染

    
     
    

    特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


    举报收藏 0评论 0
    0相关评论
    相关最新动态
    推荐最新动态
    点击排行
    {
    网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号