是誰(shuí)在敲打我窗??解恰,是Node.png
nvm
node版本管理工具,可以切換多個(gè)nodejs版本
-
安裝
- mac os Homebrew
// 安裝brew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" // 安裝nvm brew install nvm
- windows nvm-windows
下載地址:https://github.com/coreybutler/nvm/releases
- mac os Homebrew
-
使用
-
nvm list
: 查看當(dāng)前所有node版本 -
nvm install v10.13.0
: 安裝指定的版本 -
nvm uninstall
: 卸載某個(gè)版本 -
nvm use --delete-prefix 10.13.0
: 切換到指定版本
-
Http請(qǐng)求概述
DNS解析搂赋,建立TCP連接(3次握手??)闽寡,發(fā)送http請(qǐng)求
server端接收到http請(qǐng)求,處理碧浊,并返回
客戶端接收到返回?cái)?shù)據(jù)懦胞,處理數(shù)據(jù)(如渲染頁(yè)面)
常用的請(qǐng)求方式
-
GET
客戶端向server端獲取數(shù)據(jù),通過(guò)querystring來(lái)傳遞數(shù)據(jù)梦碗,瀏覽器直接訪問(wèn)禽绪,發(fā)送get請(qǐng)求
const http = require('http')
const querystring = require('querystring')
const server = http.createServer((req, res) => {
console.log('method:', req.method) // GET
const url = req.url // 請(qǐng)求完整的url
console.log('url:', url)
req.query = querystring.parse(url.split('?')[1]) // 解析querystring
console.log('query:', req.query)
res.end(JSON.stringify(req.query)) // 返回querystring
})
server.listen(8002)
console.log('OK啦')
瀏覽器打開(kāi).png
-
POST
客戶端要向服務(wù)端傳遞數(shù)據(jù),通過(guò)post data傳遞數(shù)據(jù)洪规,使用postman或者apifox等工具模擬請(qǐng)求
const http = require('http')
const server = http.createServer((req, res) => {
if(req.method === 'POST') {
// 數(shù)據(jù)格式
console.log('content-type', req.headers['content-type'])
// 接收數(shù)據(jù)
let postData = ""
req.on('data', chunk => {
postData += chunk.toString()
})
req.on('end', () => {
console.log(postData)
res.end('hello world') // 在這里返回印屁,因?yàn)槭钱惒? })
}
})
server.listen(8000)
console.log('OK啦')
image.png
模擬.png
測(cè)試項(xiàng)目
-
環(huán)境搭建
- nodemon監(jiān)聽(tīng)文件變化,自動(dòng)重啟node
npm install --save nodemon
-
cross-env - npm (npmjs.com)
設(shè)置環(huán)境變化斩例,兼容mac linux 和 windows
npm install --save cross-env
-
環(huán)境配置
package.json
{ "name": "blog-1", "version": "1.0.0", "description": "", "main": "bin/www.js", "dependencies": { "cross-env": "^7.0.3", "nodemon": "^3.0.1" }, "devDependencies": {}, "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "cross-env NODE_ENV=dev nodemon ./bin/www.js", "pro": "cross-env NODE_ENV=production nodemon ./bin/www.js" }, "keywords": [], "author": "", "license": "ISC" }
bin/www.js
// server const http = require('http') const PORT = 8000 const serverHandle = require('../app') const server = http.createServer(serverHandle) server.listen(PORT)
app.js
// 業(yè)務(wù)代碼 const serverHandle = (req, res) => { // 設(shè)置返回格式為 JSON res.setHeader('Content-type', 'application/json') } module.exports = serverHandle
-
MySql
-
介紹
- web server 中最流行的關(guān)系型數(shù)據(jù)庫(kù)
- 官網(wǎng)可免費(fèi)下載雄人,學(xué)習(xí)
- 輕量級(jí),易學(xué)易用
安裝
注:執(zhí)行過(guò)程中需要輸入root用戶名的密碼念赶,要記住這個(gè)密碼
可視化工具
mysql workbench
操作mysql的客戶端础钠,可視化操作,下載叉谜,
當(dāng)然還有我們的小貓爪Navicat
大家自行下載哈~操作數(shù)據(jù)庫(kù)
-
建庫(kù)-舉個(gè)??????
blog.png -
建表-舉個(gè)??????
user.png 表操作(增刪改查)
增:
sql語(yǔ)句前面加-- 表示注釋當(dāng)前查詢
// 增:password是mysql的關(guān)鍵字需要加``轉(zhuǎn)成普通的字段名 insert into user(username, `password`, 'realname')values("zhangsan","123","張三");
刪
delete from user where username='lisi';
?? 通過(guò)做標(biāo)記的方式刪除
status列.png -
update user set status='0' where username='lisi';
select * from user where status='1'
// 查詢satus不等于0的數(shù)據(jù)
select * from users where status <> 0
軟刪除.png
改
?? 直接執(zhí)行會(huì)報(bào)錯(cuò)提示正在運(yùn)行安全模式
update user set realname='張三6' where username='zhangsan'; //
報(bào)錯(cuò)啦.png
?? 解決辦法
// 執(zhí)行成功后這條命令可以刪掉啦
SET SQL_SAFE_UPDATES = 0;
?? 再次執(zhí)行更新命令
成功啦.png
查
select * from user; // 整張表
select id,username from user; // 根據(jù)列查詢
select * from user where username='zhangsan' and `password` = '123'; // 根據(jù)條件查詢and-且or-或
select * from user where username like '%zhang%'; // 模糊查詢
select * from user where password like '%1%' order by id; // 按照id進(jìn)行正序排列 desc倒序排列
-
NodeJs 操作mysql
- 下載
npm install --save mysql
- index.js
const mysql = require('mysql')
// 創(chuàng)建連接對(duì)象
const con = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'test',
database: 'myblog'
})
// 開(kāi)始連接
con.connect()
// 執(zhí)行 sql 語(yǔ)句
const sql = 'select * from user;'
con.query(sql, (err, result) => {
if(err) {
console.error(err);
}
console.log(result);
})
// 關(guān)閉連接
con.end()
- 坑來(lái)了
// 運(yùn)行
node index.js
// ?有請(qǐng)?jiān)蹅兊谝晃豢娱W亮登場(chǎng)?
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support
authentication protocol requested by server; consider upgrading MySQL client
-
分析錯(cuò)誤
MYSQL8.0以上的版本Node還暫時(shí)不支持
- 版本問(wèn)題
解決: 可以去官網(wǎng)下載低版本的MySql
- 使用CMD連接
解決:
// 連接數(shù)據(jù)庫(kù) mysql -u root -p Enter password: ****** // 輸入自己的密碼 // 成功后輸入 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; // 123456是自己的新密碼 // 刷新權(quán)限 FLUSH PRIVILEGES;
對(duì)啦F煊酢!答應(yīng)我一定停局!一定很钓!一定!要改自己代碼里的密碼董栽,要不然你還會(huì)看到這樣的友好提示码倦,別問(wèn)我是咋知道的??
// 嘿,兄嘚~~ Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)
私密馬賽.jpg
終點(diǎn)來(lái)啦6肌T!
// 運(yùn)行擒抛,你就會(huì)看到M破!
node index.js
喜大樂(lè)奔啊兄弟們歧沪,誰(shuí)懂一把辛酸淚.png
感謝感謝感謝這位兄臺(tái)的傾囊相助啊民泵,解決了俺的燃眉之急,大家多多支持【Node】使用Node.js連接數(shù)據(jù)庫(kù)時(shí)報(bào)錯(cuò)客戶端不支持服務(wù)器請(qǐng)求的身份驗(yàn)證協(xié)議_Genius-Sue的博客-CSDN博客
淚目.gif
未完待續(xù)...
誒.png