张三的博客项目总结
请问项目用到了哪些技术?
Node.js
Modules
CommonJS的模块化
ECMAScript Module
Expresss()框架
MongoDB数据库
Mongoose库
Schema()
Model()
-
MVC:APP的设计模式/思想
Model:模型(数据)
View:视图
Controller:控制器
BootStrap:构建布局
EJS:视图模版
-
NPM VS NPX
Npm : Node.js的软件包管理器(Node.js Package Manager )
NPX: Node.js的软件包执行器 (Node.js Package Executor)
express Generator
定义:
express Generator是快速生成Express APP的脚手架。
Node.js APP 的开发步骤
第1步:项目初始化
创建package.json文件(模块包,管理项目用到模板)
mkdir myApp
cd myApp
npm init --yes
npm init -y第2步. 创建项目目录结构
myApp
models:存放数据模型模块 module.exports = Blog
views: 存放ejs视图文件
controllers: 存放控制器:处理请求的回调
routes: 存放路由表
public: 存放静态资源(图片、css、js、字体)
app.js: 主文件(App入口)
-
package.json: 描述App(app的名字、描述、关键字、版本、第三方依赖)第3步:安装项目所需模块 一键安装npm i express mongoose ejs express-ejs-layouts
- express
- mongoose
- ejs
- express-ejs-layouts
第4步:引入模块(注意顺序引入)
- 用户界面
- node.js
- 内置模板
- path:用于处理(拼接)路径段;
- fs:用于处理文件系统;
- http:用于创建服务器;
- 第三方模板
- express: 构建node.js APP;
- mongoose: 与mongoDB通信;
- Ejs:创建视图;嵌入式Javasript的hitml模板 -<% %>:注入动态数据(变量、对象名、函数名、语句)
- nodemon:开发?
- express--ejs-layouts:用于构建视图的模板;
第一步:安装npm install ejs???
本地模块
Model: 如: Blog数据模型
模块化 html没有模块的概念
css使用@import导入css模块
不要把所以的css都写在一个文件里
谨慎使用@import 规则(1.必须放在css文件首行 2.注意:不要引入字体)
@import会发起请求
ES 6使用 import 和export导入模块
第5步:创建app.js的基本结构
App.js
//引入模块
const express=require('express')
//实例化App
const app = express()
//配置app实例
app.use('',callback) //为指定路径注册回调函数
app.set(key, value) //设置一个值,为以后调用
//连接数据库
const uri = ''
mongoose.connect(uri)
.then()
.catch()
//配置路由网站的基本·原理
搭建一个网站,需要做的三件事:
买一个域名:域名是ip地址的别名。域名管理面板下设置
域名解析:把ip地址绑定到域名上;
买一个服务器:
每个服务器都是一个ip地址。
ip地址绑定一个域名。
编写一套程序: -静态网页语言:HTMl css
动态网页语言:index.pjp 、 index.jsp、 index.asp、
默认页:index.html index.thm index.php
网站工作原理
网站分为两种: 静态网站:没有用到数据库,我的数据写死html页面里;
html 不支持变量 动态网站:数据从数据里注入到页面里;
<%- body %>
: 写了<%- body %>
就相当于在其他文件里写在body下的内容都可以在这里接收到
<%- %>
:输出标签
<%= %>
:输出字符串
// Task模型定义了许多和数据库通信的方法:
// Task.find() 查询全部数据
// Task.findById() 查询指定ID的数据
// Task.save() 存储数据
// Task.findByIdAndDlete() 根据指定ID删除数据
// Task.findByIdAndUpdate() 根据指定ID修改数据
请谈谈你对express的认识?
- 是什么
- 基于Node.js平台的框架
- 组成部分
- Express()构造函数
- app实例对象
- req请求对象
- res响应对象
- router对象(路由对象)
- 用途
- 用于创建一个基于Node.js的应用程序(APP)
- 主要用途:处理请求和响应
- 工作原理
- 通过( router )建立( views(视图) )和( mdel(数据) )之间的通信
- 请求方式
- < from >表单只能发起两种请求
- GET请求:获取数据的请求
- POST请求:添加数据的请求
- 发起delete请求
- 方法1.通过href发起一个GET请求,在服务端拿到id,根据id删除数据
- 方式2:使用Fetch API发起delete请求
语法
//注意:必须从浏览器端发起fetch请求 fetch('请求地址',{选项对象}) fetch('请求地址',{ method: "DELETE" })在服务端处理请求 router.delete('请求地址',(req,res) => { }) 发起put请求
1.什么是session
session指HTTP客户端和服务端的会话。(浏览器 <==> 服务器)
2.Session的用途
①HTTP是无状态的 ②session用于处理HTTP通信状态问题
3.session和cookkie的区别
①session存储在服务器的内存里,cookie存储在客户端的浏览器里
②浏览器端的cookie是通过服务端的session创建的
4.在服务器创建session的语法
app.use(session({
secret:'任意字符串',//secret:用于创sessionID(秘钥),sessionID存储在浏览器的cookie里
cookie:{
maxAge:毫秒数,//maxAge决定了cookie的有效期
},
resave:布尔值,//当session发生变化是是否需要重新存储。建议flase
saveUninitialized:布尔值//如果未完成初始化是否创建session,建议true
}))
5.express-session模块如何创建cookie?
app.use(session({})) 创建一个session对象,cookie是通过session对象创建的
6.记住一句话
①在服务器端创建session,就在浏览器植入了一个cookie
②浏览器端的cookie只存储sessionID,不存储任何其他数据
③sessionID是通过secret属性生成一个加密的随机的唯一的ID
④只要cookie植入完成,浏览器端发起的任何请求都会自动携带sessionID
7.所有的中间件函数都必须执行next()函数:跳转到下一个中间件函数
8.req.session的用途是什么?
req.session用于向服务端的Session对象添加额外信息