重識(拾)Node

是誰在敲打我窗??,是Node.png
nvm

node版本管理工具,可以切換多個nodejs版本

  • 安裝

  • 使用

    • nvm list: 查看當前所有node版本
    • nvm install v10.13.0: 安裝指定的版本
    • nvm uninstall : 卸載某個版本
    • nvm use --delete-prefix 10.13.0: 切換到指定版本
Http請求概述

DNS解析,建立TCP連接(3次握手??),發(fā)送http請求
server端接收到http請求,處理,并返回
客戶端接收到返回數(shù)據(jù),處理數(shù)據(jù)(如渲染頁面)

常用的請求方式
  • GET
    客戶端向server端獲取數(shù)據(jù),通過querystring來傳遞數(shù)據(jù),瀏覽器直接訪問,發(fā)送get請求
const http = require('http')
const querystring = require('querystring')

const server = http.createServer((req, res) => {
  console.log('method:', req.method) // GET
  const url = req.url // 請求完整的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啦')
瀏覽器打開.png
  • POST

客戶端要向服務端傳遞數(shù)據(jù),通過post data傳遞數(shù)據(jù),使用postman或者apifox等工具模擬請求

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') // 在這里返回,因為是異步
        })
    }
})
server.listen(8000)
console.log('OK啦')
image.png
模擬.png
測試項目
  • 環(huán)境搭建
    1. nodemon監(jiān)聽文件變化,自動重啟node
    npm install --save nodemon
    
    1. cross-env - npm (npmjs.com)
      設置環(huán)境變化,兼容mac linux 和 windows
    npm install --save cross-env
    
  • 環(huán)境配置
    1. 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"
    }
    
    1. bin/www.js
    // server
    const http = require('http')
    
    const PORT = 8000
    const serverHandle = require('../app')
    
    const server = http.createServer(serverHandle)
    server.listen(PORT)
    
    1. app.js
     // 業(yè)務代碼
    const serverHandle = (req, res) => {
      // 設置返回格式為 JSON
      res.setHeader('Content-type', 'application/json')
    }
    module.exports = serverHandle
    
  • MySql
    1. 介紹

      • web server 中最流行的關系型數(shù)據(jù)庫
      • 官網可免費下載,學習
      • 輕量級,易學易用
    2. 安裝
      注:執(zhí)行過程中需要輸入root用戶名的密碼,要記住這個密碼

    3. 可視化工具
      mysql workbench 操作mysql的客戶端,可視化操作,下載,
      當然還有我們的小貓爪Navicat大家自行下載哈~

    4. 操作數(shù)據(jù)庫

    • 建庫-舉個??????


      blog.png
    • 建表-舉個??????


      user.png
    • 表操作(增刪改查)

    增:sql語句前面加-- 表示注釋當前查詢
      // 增:password是mysql的關鍵字需要加``轉成普通的字段名
    insert into user(username, `password`, 'realname')values("zhangsan","123","張三");
    
    delete from user where username='lisi';
    

    ?? 通過做標記的方式刪除


    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í)行會報錯提示正在運行安全模式

update user set realname='張三6' where username='zhangsan';  //    
報錯啦.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進行正序排列 desc倒序排列
  • NodeJs 操作mysql
  1. 下載
npm install --save mysql
  1. index.js
const mysql = require('mysql')

// 創(chuàng)建連接對象
const con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'test',
    database: 'myblog'
})

// 開始連接
con.connect()

// 執(zhí)行 sql 語句
const sql = 'select * from user;'
con.query(sql, (err, result) => {
    if(err) {
        console.error(err);
    }
    console.log(result);
})

// 關閉連接
con.end()
  1. 坑來了
// 運行
node index.js

// ?有請咱們第一位坑閃亮登場?
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support 
authentication protocol requested by server; consider upgrading MySQL client
  • 分析錯誤
    MYSQL8.0以上的版本Node還暫時不支持

    1. 版本問題
    解決: 可以去官網下載低版本的MySql
    1. 使用CMD連接
    解決:
     // 連接數(shù)據(jù)庫
     mysql -u root -p
     Enter password: ****** // 輸入自己的密碼
     // 成功后輸入
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';   // 123456是自己的新密碼
    // 刷新權限
    FLUSH PRIVILEGES;
    

    對啦??!答應我一定!一定!一定!要改自己代碼里的密碼,要不然你還會看到這樣的友好提示,別問我是咋知道的??

    // 嘿,兄嘚~~
    Error: ER_ACCESS_DENIED_ERROR: Access denied for user  'root'@'localhost' (using password: YES)
    
私密馬賽.jpg
終點來啦!?。?/h5>
// 運行,你就會看到??!
node index.js
喜大樂奔啊兄弟們,誰懂一把辛酸淚.png
感謝感謝感謝這位兄臺的傾囊相助啊,解決了俺的燃眉之急,大家多多支持【Node】使用Node.js連接數(shù)據(jù)庫時報錯客戶端不支持服務器請求的身份驗證協(xié)議_Genius-Sue的博客-CSDN博客
淚目.gif

未完待續(xù)...

誒.png

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容