使用Node.js開發(fā)App的步驟
-
創(chuàng)建項(xiàng)目目錄
mkdir myapp cd myapp //合并以上兩步 mkdir myapp && cd myapp -
初始化
npm init --yes //目的:創(chuàng)建package.json文件,該文件記錄了項(xiàng)目信息及項(xiàng)目中所有使用的模塊。 -
構(gòu)建項(xiàng)目結(jié)構(gòu)
myapp - views - public - routes - package.json - package-lock.json - app.js -
安裝模塊
npm install express -
引入模塊
const express = require("express") -
寫需求
......
網(wǎng)站根目錄
-
根目錄 VS 用戶根目錄
\ ~ 查看當(dāng)前目錄:pwd
項(xiàng)目根目錄:訪問權(quán)限設(shè)置為公開、任何人都可以訪問的
public目錄
定義
Public 目錄是Node.js中存放網(wǎng)站靜態(tài)文件的目錄。靜態(tài)文件包括:
- 圖片
- css文件
- js文件
- 字體文件
mkdir public && cd public
mkdir css js images
Public : 公共的、共同的、公開
express框架
- 框架的核心是構(gòu)造函數(shù)express()
- Express() 構(gòu)造函數(shù)用于創(chuàng)建一個(gè)APP實(shí)例(服務(wù)器類型的app)
- express是基于Node.js平臺
- Node.js平臺是運(yùn)行js文件的。
- Node.js項(xiàng)目目錄
- index.js app.js server.js
- views
- html視圖模版
- ejs視圖引擎
- html視圖模版
- public
- 引入靜態(tài)資源
- 普通項(xiàng)目目錄
- index.html
- css
- style.css
- js
- Script.js
知識點(diǎn)1:express.static()
定義
配置要公開暴露的靜態(tài)資源
語法
express. static(_ dirname +'/public')
返回值
示例
app.use(express.static(path.join(__dirname,"public")));
知識點(diǎn)2:創(chuàng)建數(shù)據(jù)庫
方案一:創(chuàng)建本地mongoDB數(shù)據(jù)庫
-
啟動mongodb數(shù)據(jù)庫
# window系統(tǒng) 服務(wù) => 右鍵 => 啟動 # Mac OS brew services start mongodb/brew/mongodb-community -
連接數(shù)據(jù)庫(怎么和數(shù)據(jù)庫通信?)
- 可以使用可視化軟件Compass
- 非可視化軟件:mongosh
mongosh "mongodb://localhost:27017"
-
創(chuàng)建數(shù)據(jù)庫: zhangsanblog
使用compass手動創(chuàng)建
-
使用mongosh手動創(chuàng)建
use zhangsanblog
-
創(chuàng)建數(shù)據(jù)庫用戶
-
語法
Db.createUser({ user: 'zhangsan', pwd: '123456', roles: [{ role:"readWrite",db:"config"},"clusterAdmin"], roles: ["readWrite"] })
-
方案二:創(chuàng)建云數(shù)據(jù)庫
- 登錄Atlas賬戶
- 創(chuàng)建數(shù)據(jù)庫:greenblong
- 創(chuàng)建用戶:ge Htow123456
知識點(diǎn)3:連接字符串
定義
連接字符串特指在App開發(fā)過程中連接數(shù)據(jù)庫的地址
語法
"協(xié)議://用戶名:密碼@數(shù)據(jù)庫地址/數(shù)據(jù)庫名"
云數(shù)據(jù)庫復(fù)制的連接字符串
從云數(shù)據(jù)庫復(fù)制的連接字符串:
mongodb+srv://ge:<password>@greenblong.7xfolev.mongodb.net/?retryWrites=true&w=majority
用你的用戶名和密碼替換<username>和<password>
mongodb+srv://ge:Htow123456@greenblong.7xfolev.mongodb.net/?retryWrites=true&w=majority
本地?cái)?shù)據(jù)庫的連接
"mongodb://ge:Htow123456@127.0.0.1:27107/greenblong"
"mongodb://ge:Htow123456@localhost:27107/greenblong"
知識點(diǎn)4:Node和MongoDB的通信
通信方式有兩種:
- Mongodb模塊:
- mongodb模塊是Node.js原生提供的與mongoDB數(shù)據(jù)庫通信的API。
- Mongoose模塊:
- 是第三方提供的在Node平臺與MongoDB數(shù)據(jù)庫通信的方式。
- Mongoose是一個(gè)庫。
- 庫:就是函數(shù)的集合。
- Mongoose庫包裹Node API。
知識點(diǎn)5:使用Mongoose模塊連接數(shù)據(jù)庫
const mongoose = require('mongoose')
mongoose.connect(uri)
.then((result) => {
console.log('數(shù)據(jù)庫已經(jīng)連接')
})
.catch( err => console.log(err))
mongoose是什么
- mongoose的核心是mongoose()構(gòu)造函數(shù)
- mongoose是一個(gè)ODM(對象數(shù)據(jù)模型)。(Object Data Model)
- 使用JS對象的語法來映射MongoDB數(shù)據(jù)庫中的表和document
- collection:數(shù)據(jù)庫中的表。
- Document: 表中的一條記錄
- 使用JS對象的語法來映射MongoDB數(shù)據(jù)庫中的表和document
Schema()
- Schema()是一個(gè)構(gòu)造函數(shù)。
- Schema()構(gòu)造函數(shù)用于創(chuàng)建實(shí)例對象。
- 每一個(gè)
schema實(shí)例對象映射一個(gè)MongoDB數(shù)據(jù)庫表。- 定義表中的document結(jié)構(gòu)
語法
new Schema(obj,options)
new Schema({定義數(shù)據(jù)庫表結(jié)構(gòu)},{選項(xiàng)對象:描述前面的表})
返回值
返回schema對象
示例:創(chuàng)建一個(gè)blogSchema表,用來存儲博客的文章
const blogSchema = new Schema({
title:{
type: String,
required: true
},
author:{
type: String,
required: true
},
snippet: {
type: String,
required: true
},
body:{
type: String,
required: true
}
},{})
-
寫出NPM一鍵初始化項(xiàng)目的命令
Npm init --yes
-
express.static()方法的用途
配置要公開暴露的靜態(tài)資源
-
寫出數(shù)據(jù)庫連接字符串的語法格式:
"協(xié)議://用戶名:密碼@數(shù)據(jù)庫地址/數(shù)據(jù)庫名"
-
Node和MongoDB的通信方式有哪兩種?
MongDB模塊、Mongoose模塊
-
寫出創(chuàng)建本地?cái)?shù)據(jù)庫的四步驟
①啟動MongDB數(shù)據(jù)庫
②連接數(shù)據(jù)庫
③創(chuàng)建數(shù)據(jù)庫
④創(chuàng)建數(shù)據(jù)庫用戶
-
和本地?cái)?shù)據(jù)庫進(jìn)行交互的方式有哪兩種?
可視化compass、非可視化mongosh
-
Schema()是干什么用的?
- Schema()是一個(gè)構(gòu)造函數(shù)。
- Schema()構(gòu)造函數(shù)用于創(chuàng)建實(shí)例對象。
- 每一個(gè)
schema實(shí)例對象映射一個(gè)MongoDB數(shù)據(jù)庫表。- 定義表中的document結(jié)構(gòu)
-
創(chuàng)建一個(gè)user用戶表模型,字段:
username(必填),
password(必填)
email(可選),
-
phone(必填)
const mongoose = require('mongoose'); const {Schema} = mongooseSchema({ username: { type: String, required: true }, password: { type: String, required: true }, email: { type: String, required: true }, phone: { type: String, required: true } }) const User = mongoose.model('User', userSchema); module.exports = User;
自動刷新:node --watch 文件名
知識點(diǎn)
學(xué)會安裝nodemon npm install -g nodemon
-
mongoose是什么
函數(shù)庫
-
Schema是什么
定義數(shù)據(jù)結(jié)構(gòu)模型
-
model是什么
數(shù)據(jù)模型
app.get
- app:是express()構(gòu)造函數(shù)的實(shí)例對象,它表示一個(gè)應(yīng)用程序(app)
- GET:處理get請求
app.post()
post處理post請求
語法
app.post()
app.post()
張三的博客項(xiàng)目總結(jié)
- 請問項(xiàng)目用到了哪些技術(shù)?
- Node.js
- Modules:
- CommonJS的模塊化
- ECMAScript Module
- Modules:
- Expresss()框架
- MongoDB數(shù)據(jù)庫
- Mongoose庫
- Schema()
- Model()
- MVC:APP的設(shè)計(jì)模式/思想
- Model:模型(數(shù)據(jù))
- View:視圖
- Controller:控制器
- BootStrap:構(gòu)建布局
- EJS:視圖模版
- Node.js
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步:項(xiàng)目初始化
- 創(chuàng)建package.json文件
mkdir myApp
cd myApp
npm init -y
- 創(chuàng)建項(xià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)鍵字、版本、第三方依賴)
第2步:安裝項(xiàng)目所需模塊
- 第三方模塊
- express: 構(gòu)建node.js APP
- mongoose: 與mongoDB通信
- Ejs:創(chuàng)建視圖
- 內(nèi)置模塊
- path
- fs
- 本地模塊
- Model: 如: Blog數(shù)據(jù)模型
第步:創(chuàng)建app.js的基本結(jié)構(gòu)
App.js
//引入模塊
//實(shí)例化App
const app = express()
//配置app實(shí)例
app.use('',callback) //為指定路徑注冊回調(diào)函數(shù)
app.set(key, value) //設(shè)置一個(gè)值,為以后調(diào)用
//連接數(shù)據(jù)庫
const uri = ''
mongoose.connect(uri)
.then()
.catch()
//配置路由
node開發(fā)的特點(diǎn)是模塊化開發(fā)