三、node系列之產品數據的excel數據導入以及查詢


上一個章節中,我們實現了用戶的登陸註冊以及接口請求的校驗,本章節中我們將實現node導入excel表格數據,上傳到數據庫中,實現分頁獲取數據以及依據產品的唯一標識獲取詳情數據

1、創建產品管理的路由文件

  • 新建myapp/routes/pro.js
var express = require('express');
var router = express.Router();

/* 產品路由*/
router.get('/', function(req, res, next) {
  res.send('產品路由');
});

module.exports = router;

  • myapp/app.js中註冊路由,使路由生效
var proRouter = require('./routes/pro');
app.use('/pro', proRouter);

修改app.js文件需記得重新啓動服務器

2、設計產品的集合

  • 新建myapp/sql/collection/pros.js
const mongoose = require('./../db.js'); // 引入數據庫連接模塊
const Schema = mongoose.Schema; // 拿到當前數據庫相應的集合對象

// 設計產品的集合
const proSchema = new Schema({ 
  proid: {type: String }, // 產品id
  type: { type: String }, // 產品的類型 --- 手機、男裝、女裝
  brand: { type: String }, // 品牌
  barndimg: { type: String }, // 品牌圖標
  proname: { type: String }, // 產品名稱
  price: { type: Number }, // 產品價格
  flag: { type: Number }, // 是否推薦
  proimg: { type: String }, // 產品圖片
  note: { type: String }, // 產品簡介
})

module.exports = mongoose.model('Pro', proSchema);

3、準備產品列表的excel數據表格

大勳給大家準備好了這個excel數據表格,只需要在網盤下載,將其放在項目的根目錄下即可,並且一定要記住這個文件的位置,大勳的位置在e:/
shop.xlsx

在這裏插入圖片描述

4、編寫導入功能代碼

安裝導入的模塊 node-xlsx

npm i node-xlsx -S

基本代碼

var xlsx = require('node-xlsx');
var filestr = 'E:/shop.xlsx';
// 實現導入接口
router.get('/import', (req, res, next) => {
  // 1、獲取表格信息
  let obj = xlsx.parse(filestr)
  res.send(obj)
})

輸出結果如下
在這裏插入圖片描述
細心觀察,我們需要的當前數組中的第一個元素的data字段的內容
修改代碼再次輸出

// 實現導入接口
router.get('/import', (req, res, next) => {
  // 1、獲取表格信息
  let obj = xlsx.parse(filestr)[0].data
  res.send(obj)
})

結果如下
在這裏插入圖片描述
我們發現此時的結構爲[[],[],[]],其中第一個元素的內容爲表格的表頭信息,其餘的爲表格的內容,我們此時需要做的就是遍歷數據(排除第一個),並且給每一條數據生成一個單獨的產品id,然後插入數據庫即可
代碼如下

var xlsx = require('node-xlsx');
var uuid = require('node-uuid');
var Pro = require('./../sql/collection/pros');
var sql = require('./../sql');
var filestr = 'E:/shop.xlsx';
// 實現導入接口
router.get('/import', (req, res, next) => {
  // 1、獲取表格信息
  let obj = xlsx.parse(filestr)[0].data
  let arr = []
  // 2、遍歷數據 --- 排除第一條數據
  obj.map((item, index) => {
    if (index !== 0) {
      // 3.生成一個產品的id,插入數據庫
      arr.push({
        proid: "pro_" + uuid.v1(),
        type: item[0],
        brand: item[1],
        barndimg: item[2],
        proname: item[3],
        price: item[4],
        flag: item[5], // 是否推薦
        proimg: item[6],
        note: item[7]
      }) 
    }
  })
  // 4、插入數據庫
  sql.insert(Pro, arr).then(() => {
    res.send(arr)
  })
})

5、編寫分頁查詢數據接口

在 myapp/routes/pro.js文件中添加查詢接口
此接口 默認頁碼下標從0開始,默認每頁顯示個數爲10個,一定要記住頁碼和每頁顯示個數的數據類型

// 查詢產品 --- 分頁功能
// pageCode 頁碼,默認值爲0
// limitNum 每頁顯示個數, 默認值爲10
router.get('/', function(req, res, next) {
  // 1、獲取前端的查詢條件
  let { pageCode, limitNum } = req.query;
  // 2、設置頁碼和每頁顯示個數的默認值  ---- 數據類型
  pageCode = pageCode * 1 || 0;
  limitNum = limitNum * 1 || 10;
  // 3、查詢數據
  sql.paging(Pro, {}, { _id: 0 }, limitNum, pageCode).then(data => {
    // 4、返回數據
    res.send({
      code: '200',
      success: '查詢列表成功',
      length: data.length,
      data: data
    })
  })
});

瀏覽器訪問 http://localhost:3000/pro 即可查看查詢結果
在這裏插入圖片描述

6、依據產品id查詢某一條具體數據

myapp/routes/pro.js 添加如下路由,首先獲取用戶傳遞的產品id,然後依據產品id查詢數據庫取得相應的數據即可

// 獲取產品的詳情
router.get('/detail', (req, res, next) => {
  let { proid } = req.query
  sql.find(Pro, { proid }, { _id: 0 }).then(data => {
    res.send({
      code: '200',
      message: '查詢該數據成功',
      data: data[0]
    })
  })
})

7、獲取當前產品的集合中有哪些類型或者哪些品牌

添加如下路由,默認查詢的是產品的類型,如果需要查詢品牌,請將參數type的值設爲 brand

// 實現查詢分類以及品牌的接口
router.get('/type', (req, res, next) => {
  // 1、獲取字段名 類型 type 品牌 brand,查詢數據庫
  let { type } = req.query
  type = type || 'type'
  sql.distinct(Pro, type).then(data => {
    res.send({
      code: '200',
      success: '獲取類型成功',
      // length: data.length,
      data: data
    })
  })
})

8、預告

下次分享node系列之購物車的業務邏輯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章