node(Express+Sequelize)


官方網址

一、入門案例

const os = require('os');

// 獲取系統的cpu的信息
const cpus = os.cpus(); // 獲取當前系統的cpu的數量
console.log(cpus.length);

// 獲取內存的信息
const total = os.totalmem(); // bytes
console.log(total/1024/1024/1024); // GB

// 剩余內存
const free = os.freemem();
console.log(free/1024/1024/1024); // GB
// web服務
// ajax -> api -> web server(nodejs)

const http = require('http');

const server = http.createServer((req,res)=>{
    res.end('hello');
});

server.listen(3000,'127.0.0.1',()=>{
    console.log('服務啟動成功!');
});

二、nodemon(熱加載)

開發時,修改代碼后,需要頻繁重啟項目。nodemon配置熱加載,解決了重復啟動的問題。

const http = require('http');

const server = http.createServer((req,res)=>{
    res.end('hello');
});

server.listen(3000,'127.0.0.1',()=>{
    console.log('服務啟動成功!');
});
{
  "name": "admin-api-demo",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",	# 添加此句 可用 npm start啟動項目
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {  
    "body-parser": "^1.19.0",
    "cookie-parser": "^1.4.5",
    "express": "^4.17.1",
    "multer": "^1.4.2",
    "mysql": "^2.18.1"
  }
}

1、安裝配置

# -D:安裝在開發環境
npm install nodemon -D

# 修改 package.json 中 "start": "node app.js" 改為
"start": "nodemon app.js"

# 重啟命令(nodemon也可自動重啟,因為配置了監聽 watching:*.*)
rs

2、配置nodemon.json

因為項目中不需要監聽全部文件,避免沒必要的重啟,所以配置nodemon.json。

指定要監聽的目錄,只有該目錄下的文件被改動,nodemon才會重啟項目。

{
    "watch":["./src/**/*.*"]
}

三、nrm(管理npm源)

1、安裝

npm install nrm -g

2、常用命令

# 列出npm源列表
nrm ls

# 查看當前使用的源
nrm current

# 切換源 -- 比如切換到taobao
nrm use taobao

# 添加自定義源
nrm add <registry> <url> [home]

四、nvm(管理nodejs版本)

  • Mac/Liunx -- nvm
  • Windows -- nvm-windows

1、下載nvm-windows

:如果在安裝nvm-windows之前安裝過nodejs。

​ 安裝過程中則會提示"你希望nvm管理已經安裝的 node 版本嗎?"。

​ 選擇"是"即可

2、使用

# 列出可安裝的版本
nvm list available

# 列出已安裝的版本
nvm list

# 安裝指定的版本的nodejs,例如
nvm install 10.15.0

# 使用指定版本的nodejs,例如
nvm use 10.15.0

五、Express

1、初始化項目

# 創建myapp目錄
mkdir myapp

# 進入myapp目錄
cd myapp

# 生成 package.json 文件
npm init

# 將入口改為app.js

2、安裝express

npm install express --save

# 以下幾個重要模塊需要與 express 框架一起安裝

# node.js 中間件,用於處理 JSON, Raw, Text 和 URL 編碼的數據。
npm install body-parser --save

# 解析Cookie的工具。通過req.cookies可以取到傳過來的cookie,並把它們轉成對象。
npm install cookie-parser --save

# node.js 中間件,用於處理 enctype="multipart/form-data"(設置表單的MIME編碼)的表單數據。
npm install multer --save

3、簡單服務

// 導入express
const express = require('express');
// express實例
var app = express();

// get請求
app.get('/getName/:age',(req,res)=>{

  let {age} = req.params;
  
  res.json({
     name:'張get',
     age
  });
});

// post請求
app.post('/getName',(req,res)=>{
    res.send('張post')
});

app.listen(3000,()=>{
  console.log('服務已經啟動。。。');
});

六、Route(路由)

// 導入express
const express = require('express');
// express實例
var app = express();

// 1、通過請求的方法類型 get/post/put/delete
app.get('/demo',(req,res)=>{
    // req:請求對象
    // res:服務器響應對象
    res.json({
        message:'hello get'
    })
})

app.post('/demo',(req,res)=>{
    res.json({
        message:'hello post'
    })
})

// 2、通過uri
app.get('/user/byname',(req,res)=>{
	let {name} = req.query;
    res.json({
        name
    })
})

app.get('/user/byid',(req,res)=>{
	let {id} = req.query;
    res.json({
        id
    })
})

app.listen(3000,()=>{
  console.log('服務已經啟動。。。');
});

1、app.all

1.1、場景一

滿足客戶端無論使用什么請求方式都可以得到響應

// 導入express
const express = require('express');
// express實例
var app = express();

app.all('/demo',(req,res)=>{
    res.json({
        message:'hello get'
    })
})

app.listen(3000,()=>{
  console.log('服務已經啟動。。。');
});

1.2、場景二

無論客戶端使用任何uri都可以響應

// 導入express
const express = require('express');
// express實例
var app = express();

app.all('*',(req,res)=>{
    res.json({
        message: 'demo',
        method: req.method,
        uri: req.path
    })
})

app.listen(3000,()=>{
  console.log('服務已經啟動。。。');
});

2、app.use

以上兩個場景也可通過use實現。不過一般use作為中間件使用。

3、路由拆分

// member.router.js
// 導入express
const express = require('express');
// 創建路由
const router = express.Router();

router.get('/list',(req,res)=>{
    res.json({
        list:[
            id:001,
            name:'李四'
        ]
    })
})

module.exports = router;
// sku.router.js
// 導入express
const express = require('express');
// 創建路由
const router = express.Router();

router.get('/list',(req,res)=>{
    res.json({
        list:[
            name:'鞋子'
        ]
    })
})

module.exports = router;
// 導入express
const express = require('express');
// express實例
var app = express();

// 注冊路由
const memberRouter = require('./member.router');
const skuRouter = require('./sku.router');

app.use('/member',memberRouter);	// 訪問:member/list
app.use('/sku',skuRouter); // 訪問:sku/list

app.listen(3000,()=>{
  console.log('服務已經啟動。。。');
});

七、express中間件

1、中間件完整結構

  • 是一個函數
  • 2、err,req,res,next -> function
// 導入express
const express = require('express');
// express實例
var app = express();

// 中間件完整的結構
// 1、是一個函數
// 2、err,req,res,next -> function

function demo_middleware(err,req,res,next){
    // 1、異常處理
    // 2、處理業務功能,然后轉交控制權 -- next
    // 3、響應請求 -- 結束響應 --> 當作路由的處理函數
}

function valid_name_middleware(req,res,next){
    let {name} = req.query;
    if(!name || name.length){
        res.json({
            message:'缺少name參數'
        })
    }else{
        next();
    }
}

// 匹配1
app.all('*',valid_name_middleware);

// 匹配2
app.get('/test',(req,res)=>{
    res.json({
        message:'test'
    })
})

app.listen(3000,()=>{
  console.log('服務已經啟動。。。');
});

2、中間件各級別的使用

  • app (應用)級別的使用

    • 注冊的使用,一定在最頂級

    • app.use --> api加載

      // 導入express
      const express = require('express');
      // express實例
      var app = express();
      
      function log_middleware(req,res,next){
          console.log('請求來了。。。');
          next();
      }
      
      // app級別使用
      app.use(log_middleware);
      
      // 加載 static 的中間件(內置)
      // 獲取static目錄下的靜態文件
      app.use(express.static('static',{
          // 如果請求沒有后綴,自動加默認后綴
          extensions:['html','htm']
      }))
      
      app.listen(3000,()=>{
        console.log('服務已經啟動。。。');
      });
      
  • router 級別

    // user_router
    // 導入express
    const express = require('express');
    // 創建路由
    const router = express.Router();
    
    router.use(function(req,res,next){
        console.log('log from router');
        next();
    })
    
    // 路由內部使用
    router.get('/demo',[/** middleware */],(req,res)=>{
        res.json({
           message:'from route demo'
        })
    })
    
    module.exports = router;
    
    // 導入express
    const express = require('express');
    // 注冊路由
    const userRouter = require('./router/user_router');
    // express實例
    var app = express();
    
    // router級別使用
    
    
    app.use('/user',userRouter);
    
    app.listen(3000,()=>{
      console.log('服務已經啟動。。。');
    });
    
  • 異常處理

八、異常處理

// 導入express
const express = require('express');
// express實例
var app = express();

app.get('/demo',(req,res)=>{
   throw new Error('測試異常');
});

// 中間件
function error_handler_middleware(err,req,res,next){
    if(err){
        let {message} = err;
        res.status(500);
        .json({
            message: `${message || '服務器異常'}`
        })
    }
}

// 404處理
function not_found_handler(req,res,next){
    res.json({
        message:'api不存在'
    })
}

app.use(not_found_handler);	// 先判斷此異常
app.use(error_handler_middleware);	// 最后判斷此異常

app.listen(3000,()=>{
  console.log('服務已經啟動。。。');
});

九、Sequelize

1、安裝

# 安裝
npm install sequelize -S
npm install sequelize-cli -S
npm install mysql2 -S

npx sequelize-cli init

2、配置

  • 修改config目錄下的config.json文件

3、創建數據模型

npx sequelize-cli 
model:generate 
--name User # 表名稱
--attributes # 屬性。字段名:字段類型
firstName:string,
lastName:string,
email:string

4、生成數據庫表

npx sequelize-cli db:migrate --env=<config.json的環境key>

5、js

// 導入express
const express = require('express');
// express實例
var app = express();

const models = require('../models');

// 插入一條數據
app.get('/create',async (res,req)=>{
    let {name} = req.query;
    // 返回promise user-->sequelize對象
    let user = await models.User.create({
        name
    })
    console.log(user);
    res.json({
        message:'創建成功',
        user
    })
})

// 獲取列表
app.get('/list',async (res,req)=>{
    let list = await models.User.findAll();
    res.json({
        list
    })
})

// 查詢一條數據
app.get('/detail/:id',async (res,req)=>{
    let {id} = req.params;
    let user = await models.User.findOne({
            where:{
                id
            }
        });
    res.json({
        user
    })
})

app.listen(3000,()=>{
  console.log('服務已經啟動。。。');
});

本文內容學習自 慕課網 -- Nodejs全棧入門

課程地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM