張三的博客項目總結(jié)
請問項目用到了哪些技術(shù)攻晒?
- Node.js
- Modules
- CommonJS的模塊化
- ECMAScript Module
- Expresss()框架
- MongoDB數(shù)據(jù)庫
- Mongoose庫
- Schema()
- Model()
- MVC:APP的設計模式/思想
- Model:模型(數(shù)據(jù))
- View:視圖
- Controller:控制器
- BootStrap:構(gòu)建布局
- EJS:視圖模版
- NPM VS NPX
- Npm : Node.js的軟件包管理器(Node.js Package Manager )
- NPX: Node.js的軟件包執(zhí)行器 (Node.js Package Executor)
express Generator
定義:
express Generator是快速生成Express APP的腳手架泼掠。
Node.js APP 的開發(fā)步驟
第1步:項目初始化
創(chuàng)建package.json文件(模塊包肌访,管理項目用到模板)
mkdir myApp
cd myApp
npm init --yes
npm init -y第2步. 創(chuàng)建項目目錄結(jié)構(gòu)
myApp
- models:存放數(shù)據(jù)模型模塊 module.exports = Blog
- views: 存放ejs視圖文件
- controllers: 存放控制器:處理請求的回調(diào)
- routes: 存放路由表
- public: 存放靜態(tài)資源(圖片妙同、css坝咐、js唧垦、字體)
- app.js: 主文件(App入口)
- package.json: 描述App(app的名字、描述煤禽、關(guān)鍵字、版本岖赋、第三方依賴)第3步:安裝項目所需模塊 一鍵安裝npm i express mongoose ejs express-ejs-layouts
- express
- mongoose
- ejs
- express-ejs-layouts
第4步:引入模塊(注意順序引入)
用戶界面
node.js
內(nèi)置模板
- path:用于處理(拼接)路徑段檬果;
- fs:用于處理文件系統(tǒng);
- http:用于創(chuàng)建服務器;
第三方模板
- express: 構(gòu)建node.js APP;
- mongoose: 與mongoDB通信;
- Ejs:創(chuàng)建視圖;嵌入式Javasript的hitml模板 -<% %>:注入動態(tài)數(shù)據(jù)(變量唐断、對象名选脊、函數(shù)名、語句)
- nodemon:開發(fā)?
- express--ejs-layouts:用于構(gòu)建視圖的模板脸甘;
第一步:安裝npm install ejs
- 本地模塊
- Model: 如: Blog數(shù)據(jù)模型
- 模塊化 html沒有模塊的概念
- css使用@import導入css模塊
- 不要把所以的css都寫在一個文件里
- 謹慎使用@import 規(guī)則(1.必須放在css文件首行 2.注意:不要引入字體)
- @import會發(fā)起請求
- ES 6使用 import 和export導入模塊
- 第5步:創(chuàng)建app.js的基本結(jié)構(gòu)
App.js
//引入模塊
const express=require('express')
//實例化App
const app = express()
//配置app實例
app.use('',callback) //為指定路徑注冊回調(diào)函數(shù)
app.set(key, value) //設置一個值恳啥,為以后調(diào)用
//連接數(shù)據(jù)庫
const uri = ''
mongoose.connect(uri)
.then()
.catch()
//配置路由網(wǎng)站的基本·原理
搭建一個網(wǎng)站,需要做的三件事:
買一個域名:域名是ip地址的別名丹诀。域名管理面板下設置
域名解析:把ip地址綁定到域名上钝的;
買一個服務器:
每個服務器都是一個ip地址。
ip地址綁定一個域名铆遭。
編寫一套程序: -靜態(tài)網(wǎng)頁語言:HTMl css
動態(tài)網(wǎng)頁語言:index.pjp 硝桩、 index.jsp、 index.asp枚荣、
默認頁:index.html index.thm index.php
網(wǎng)站工作原理
網(wǎng)站分為兩種: 靜態(tài)網(wǎng)站:沒有用到數(shù)據(jù)庫碗脊,我的數(shù)據(jù)寫死html頁面里;
html 不支持變量 動態(tài)網(wǎng)站:數(shù)據(jù)從數(shù)據(jù)里注入到頁面里橄妆;
<%- body %> : 寫了<%- body %>就相當于在其他文件里寫在body下的內(nèi)容都可以在這里接收到
<%- %>:輸出標簽
<%= %>:輸出字符串
// Task模型定義了許多和數(shù)據(jù)庫通信的方法:
// Task.find() 查詢?nèi)繑?shù)據(jù)
// Task.findById() 查詢指定ID的數(shù)據(jù)
// Task.save() 存儲數(shù)據(jù)
// Task.findByIdAndDlete() 根據(jù)指定ID刪除數(shù)據(jù)
// Task.findByIdAndUpdate() 根據(jù)指定ID修改數(shù)據(jù)
express的認識?
是什么
- 基于Node.js平臺的框架
組成部分
- Express()構(gòu)造函數(shù)
- app實例對象
- req請求對象
- res響應對象
- router對象(路由對象)
用途
- 用于創(chuàng)建一個基于Node.js的應用程序(APP)
- 主要用途:處理請求和響應
工作原理
- 通過( router )建立( views(視圖) )和( mdel(數(shù)據(jù)) )之間的通信
請求方式
- < from >表單只能發(fā)起兩種請求
- GET請求:獲取數(shù)據(jù)的請求
- POST請求:添加數(shù)據(jù)的請求
發(fā)起delete請求
- 方法1.通過href發(fā)起一個GET請求衙伶,在服務端拿到id,根據(jù)id刪除數(shù)據(jù)
- 方式2:使用Fetch API發(fā)起delete請求
語法
//注意:必須從瀏覽器端發(fā)起fetch請求
fetch('請求地址',{選項對象})
fetch('請求地址',{
method: "DELETE"
})在服務端處理請求
router.delete('請求地址',(req,res) => {
})
發(fā)起put請求
什么是session
- session指HTTP客戶端和服務端的會話祈坠。(瀏覽器 <==> 服務器)
Session的用途
- HTTP是無狀態(tài)的
- session用于處理HTTP通信狀態(tài)問題
session和cookkie的區(qū)別
- session存儲在服務器的內(nèi)存里,cookie存儲在客戶端的瀏覽器里
- 瀏覽器端的cookie是通過服務端的session創(chuàng)建的
在服務器創(chuàng)建session的語法
app.use(session({
secret:'任意字符串',//secret:用于創(chuàng)sessionID(秘鑰)矢劲,sessionID存儲在瀏覽器的cookie里
cookie:{
maxAge:毫秒數(shù),//maxAge決定了cookie的有效期
}赦拘,
resave:布爾值,//當session發(fā)生變化是是否需要重新存儲。建議flase
saveUninitialized:布爾值//如果未完成初始化是否創(chuàng)建session卧须,建議true
}))
express-session模塊如何創(chuàng)建cookie?
- app.use(session({})) 創(chuàng)建一個session對象另绩,cookie是通過session對象創(chuàng)建的
記住一句話
在服務器端創(chuàng)建session,就在瀏覽器植入了一個cookie
- 瀏覽器端的cookie只存儲sessionID花嘶,不存儲任何其他數(shù)據(jù)
- sessionID是通過secret屬性生成一個加密的隨機的唯一的ID
- 只要cookie植入完成笋籽,瀏覽器端發(fā)起的任何請求都會自動攜帶sessionID
所有的中間件函數(shù)都必須執(zhí)行next()函數(shù):跳轉(zhuǎn)到下一個中間件函數(shù)
req.session的用途是什么?
- req.session用于向服務端的Session對象添加額外信息