用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

取捨?發表於2019-10-13

運用Node手摸手教你寫一個教程網站(遵循響應式),包括前臺內容和後臺管理系統,整合Express框架和Mongodb資料庫伺服器開發;教你用Vue.JS,ElementUI和iViewUI寫出超漂亮的頁面

技術棧比較全面,最詳細最用心的文章,學不到東西你問我!

作者原創文章, 轉載前請留言或聯絡作者!!!

如果對你有幫助,請賞個star,謝謝哦~ github地址

介紹

技術棧

  • 後端: Express + Mongodb + passport-jwt + jsonwebtoken等等

  • 前端: Vue.JS + ElementUI + iViewUI + Axios等等

測試環境

VSCode + Node8.9.4 + Google(75.xxx) + VueCli(3.7.0)

功能介紹

  • 學習網站上的知識
  • 搜尋功能
  • 留言功能
  • 檢視視訊功能
  • 欣賞歌曲
  • 文章管理
  • 每日簽到
  • 購買課程訂單管理
  • 後臺管理
  • 等等.......

專案設計

-- 後臺基本架構
Node-Vue-App
├── README.md
├── server.js  -- 後臺檔案入口
├── test.http  -- 測試檔案
├── api  -- 路由檔案
│    ├── admin.js  -- 配置管理員的操作
│    ├── article.js  -- 配置文章的相關操作
|    ├── index.js  -- 配置首頁的相關資料
|    ├── messagewall.js  -- 配置留言社群
|    ├── music.js  -- 配置歌曲資訊
|    ├── user.js  -- 記錄使用者的資訊,配置使用者的相關操作
|    └── vipcourse.js  -- 配置VIP課程的相關操作
├── config -- 配置檔案
|    ├── Date.js  -- 配置日期格式化外掛
|    ├── http.js  -- 配置跨域
|    ├── keys.js  -- 配置token的簽證金鑰
|    └── MongodbURI.js  -- 配置Mongodb一些資訊
├── model
|    └── **  -- 自定義資料庫的Mongodb模型
├── mongodb
|    └── mongodb.js  -- 配置Mongodb,連結資料庫 
├── passport
|    └── passport.js  -- 驗證token的合法性
├── static
|    └── **  -- 靜態檔案存放處 
├── client
|    └── **  -- (Vue)前臺頁面構架
複製程式碼
-- 前臺頁面架構
Client
├── README.md
├── public
|    ├── index.html  -- vue掛載頁面
|    └── **  -- 你可以在這裡連結少量靜態資源
├── src  -- 開發資料夾
|    ├── App.vue  -- Vue掛載根頁面
|    ├── http.js  -- 配置http,響應攔截操作
|    ├── main.js  -- Vue程式入口檔案,掛載各種元件
|    ├── router.js  -- Vue路由配置檔案
|    ├── store.js  -- Vuex的狀態管理檔案
|    ├── assets
|    |     └── **  -- 存放靜態資源
|    ├── components
|    |     └── pcnav.vue  -- 導航欄
|    ├── myplugin  -- 配置外掛
|    |     ├── Date.js  -- 格式化日期
|    |     └── Loading.js  -- 載入動畫
|    ├── store  -- 狀態儲存
|    |     ├── adminstore.js  -- 管理員狀態
|    |     ├── musicstore.js  -- 歌曲資訊
|    |     ├── searchstore.js  -- 搜尋資訊
|    |     └── userstore.js  -- 使用者資訊
|    ├── views  -- 頁面檔案
|    |     ├── search.vue  -- 搜尋頁面
|    |     ├── NotFound.vue  -- 404頁面
|    |     ├── Home.vue  -- 主頁面
|    |     ├── Index.vue  -- 前端首頁
|    |     ├── adminPage  -- 管理員
|    |     |     ├── adminindex.vue  -- 後臺首頁
|    |     |     ├── adminlogin.vue  -- 後臺登入頁面
|    |     |     ├── adminnav.vue  -- 後臺導航欄
|    |     |     ├── index.vue  -- 後臺根掛載點
|    |     |     ├── mainarea.vue  -- 後臺頁面主區域掛載點
|    |     |     └── components  -- 後臺元件
|    |     |     |     ├── addarticle.vue  -- 新增文章
|    |     |     |     ├── buycourselogs.vue  -- 購買課程記錄
|    |     |     |     ├── communitymessage.vue  -- 社群留言
|    |     |     |     ├── cssmessage.vue  -- VIP課程css留言
|    |     |     |     ├── editcss.vue  -- 編輯CSS文章
|    |     |     |     ├── edithtml.vue  -- 編輯HTML文章
|    |     |     |     ├── editjavascript.vue  -- 編輯Javascript文章
|    |     |     |     ├── homepagedata.vue  -- 前臺主頁資料管理
|    |     |     |     ├── htmlmessage.vue  -- VIP課程html留言
|    |     |     |     ├── jsmessage.vue  -- VIP課程JavaScript留言
|    |     |     |     ├── loginlog.vue  -- 登入日誌
|    |     |     |     ├── managemusic.vue  -- 歌曲管理
|    |     |     |     ├── manageusers.vue  -- 使用者管理
|    |     |     |     ├── operationlog.vue  -- 操作日誌
|    |     |     |     ├── registerlog.vue  -- 註冊日誌
|    |     |     |     ├── signlog.vue  -- 簽到日誌
|    |     |     |     ├── specificarticles.vue  -- 賬單管理
|    |     |     |     ├── vipcoursecss.vue  -- VIP(css)管理
|    |     |     |     ├── vipcoursehtml.vue  -- VIP(html)管理
|    |     |     |     └── vipcoursejs.vue  -- VIP(js)管理
|    |     ├── coursePage  -- 文章展示
|    |     |     ├── css.vue  -- css文章
|    |     |     ├── html5.vue  -- HTML文章
|    |     |     └── javascript.vue  -- Javascript文章
|    |     ├── userPage  -- 使用者頁面
|    |     |     ├── aboutme.vue  -- 作者
|    |     |     ├── enjoymusic.vue  -- 欣賞音樂
|    |     |     ├── messagewall.vue  -- 社群留言
|    |     |     ├── userinfo.vue  -- 個人資料
|    |     |     ├── userlogin.vue  -- 使用者登入
|    |     |     ├── userregister.vue  -- 使用者註冊
|    |     |     └── vipcourse.vue  -- 看VIP課程
|    |     └── vipCoursePage  -- VIP課程頁面
|    |     |     ├── csscourse.vue  -- css
|    |     |     ├── htmlcourse.vue  -- html
|    |     |     └── javascriptcourse.vue  -- javascript
├── babel.config.js  -- babel配置
└── vue.config.js  -- vue配置檔案
複製程式碼

專案測試介紹

  1. 本專案中後臺使用3001埠, 前臺使用8080埠。
  2. 你需要在裝有Node和Vue的環境中測試,如果其中一個沒有請先下載(Node下載,Vue下載).
  3. 下載依賴:npm install 下載後端依賴, 接著進入client, npm install 下載前端依賴.
  4. 配置資料庫: 請將打包的資料JSON檔案還原到Mongodb資料庫中,請對應Mongodb配置的地址和資料庫名,你也可以自定義地址和資料庫名,一一對應即可.
  5. 以上工作完成後,使用命令node server &命令啟動Node伺服器,啟動成功會顯示: **Server is running on port [3001]. **Mongodb is contected.
  6. 進入client,開啟命令板,使用命令npm run serve啟動vueCli-server,預設使用8080埠,啟動成功後用瀏覽器訪問http://localhost:8080,如果首頁資料展示成功,則證明資料和程式啟動成功。
  7. 本例中將Mongodb部署在本地電腦上,如果你仔細閱讀了這篇文件,啟動專案應該是很容易的。如果你把Mongodb部署在其他地方,請自行修改config/mongodbURI.js配置檔案資訊。
  8. 只有完成了上述步驟後再啟動專案,不然專案會因為連線不上Mongodb而報錯。

準備

passport-jwt和jsonwebtoken

jsonwebtoken是對使用者資訊加密成不可逆向破解的token.關於passport-jwt,是用來對使用者請求時所帶的token資訊進行過期驗證,如果超過簽證的合法時間,則會請前臺發出token失效的資訊,提示使用者重新獲取合法的token資訊,否則無法繼續請求加密的資訊;

  • jsonwebtoken
// 設定token
// 規則
 const rule = {
    id:String(userinfo._id),
    username:userinfo.username,
    email:userinfo.email,
    date:user.date,
    signdate:userinfo.signdate,
    signcount:userinfo.signcount,
    avatar:userinfo.avatar,
    phone:userinfo.phone
};

// 簽證加密
// jwt.sign(規則, key(私鑰), {配置:比如過期時長}, (err, token){ 響應程式 })
jwt.sign(rule,key,{expiresIn:7200},(err, token) => {
    if(err) throw err;
    res.json({"token" : "Bearer " + token})
})
複製程式碼
  • passport-jwt
const key = require("../config/keys").KEYORSECRET;
const JwtStrategy = require('passport-jwt').Strategy,
      ExtractJwt = require('passport-jwt').ExtractJwt;
var opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = key;

module.exports = passport => {
    passport.use(new JwtStrategy(opts, (jwt_payload, done) => {
        UserInfo.findById(jwt_payload.id)
                .then(user => {
                    if (user) {
                        return done(null, user);
                    } else {
                        return done(null, false);
                        // or you could create a new account
                    }
                })
    }));
}
複製程式碼

詳細的文件地址:Passport-Jwt合法驗證,token加密

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統


svg-captcha

svg-captcha驗證碼的運用,防止暴力破解密碼,加強安全性. 詳細的文件地址:svg-captcha

使用驗證碼

// 後臺生成驗證碼
router.get("/getCaptcha", (req, res) => {
    var captcha = svgCaptcha.create({  
        // 翻轉顏色  
        inverse: false,  
        // 字型大小  
        fontSize: 38,  
        // 噪聲線條數  
        noise: 3,  
        // 寬度  
        width: 80,  
        // 高度  
        height: 32,  
      });  
      // 儲存到session,忽略大小寫  
      req.session = captcha.text.toLowerCase(); 
      console.log(req.session); //0xtg 生成的驗證碼
      //儲存到cookie 方便前端呼叫驗證
      res.cookie('captcha', req.session); 
      res.setHeader('Content-Type', 'image/svg+xml');
      res.send(String(captcha.data));
      res.end();
})


// 前臺獲取驗證碼
--HTML
<img width="80" style="background:#EEE9E9;margin-left:30px;" ref="captcha" height="32" src="http://localhost:3001/api/user/getCaptcha" @click="refreshCaptcha">

--js
// 獲取驗證碼cookie
getCookie(cname){
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++){
        var c = ca[i].trim();
        if (c.indexOf(name)==0) return c.substring(name.length,c.length);
    }
    return "";
},
// 重新整理驗證碼
refreshCaptcha(){
    this.$refs.captcha.src = "http://localhost:3001/api/user/getCaptcha?d=" + Math.random();
},

最後用 填寫的驗證碼進行對比
複製程式碼

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統
控制檯

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統


Vue、ElementUI分頁使用

關於ElementUI分頁詳細請見:ElementUI的Pagination分頁學習

-- html
<el-pagination
    v-if='paginations.total > 0'
    :page-sizes="paginations.page_sizes"
    :page-size="paginations.page_size"
    :layout="paginations.layout"
    :total="paginations.total"
    :current-page.sync='paginations.page_index'
    @current-change='handleCurrentChange'
    @size-change='handleSizeChange'>
</el-pagination>

-- js
data(){
    return{
        allUsers:[],  // 用來儲存最終資訊, 被顯示的dom點呼叫
        allTableData:[],  // 使用者承接分頁設定的資料
        paginations: {   // 分頁元件資訊
            page_index: 1, // 當前位於哪頁
            total: 0, // 總數
            page_size: 5, // 1頁顯示多少條
            page_sizes: [5, 10, 15, 20], //每頁顯示多少條
            layout: "total, sizes, prev, pager, next, jumper" // 翻頁屬性
        },
    }
},
methods:{
    // 獲取當前頁
    handleCurrentChange(page) {
        let sortnum = this.paginations.page_size * (page - 1);
        let table = this.allTableData.filter((item, index) => {
            return index >= sortnum;
        });
        // 設定預設分頁資料
        this.getAllUsers = table.filter((item, index) => {
            return index < this.paginations.page_size;
        });
        this.getAllUsers = table.filter((item, index) => {
            return index < this.paginations.page_size;
        });
    },
    // 切換size
    handleSizeChange(page_size) {
        this.paginations.page_index = 1;
        this.paginations.page_size = page_size;
        this.getAllUsers = this.allTableData.filter((item, index) => {
            return index < page_size;
        });
    },
     // 總頁數
    setPaginations() {
        this.paginations.total = this.allTableData.length;
        this.paginations.page_index = 1;
        this.paginations.page_size = 5;
        // 設定預設分頁資料
        this.getAllUsers = this.allTableData.filter((item, index) => {
            return index < this.paginations.page_size;
        });
    },
}
複製程式碼

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

沒了嗎?對,分頁就是這麼簡單!你學會了嗎?有些前端開發的同學總是對分頁比較陌生,學會這個,讓你不再產生煩惱!

對於專案中其他特殊比較複雜的功能,還請您先測試後再進行學習,程式碼註釋很清晰,如果哪裡不懂請看下方聯絡方式

專案截圖

  • 首頁(懶載入)

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

  • HTML教程

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

  • 留言牆

(這個根據一個大牛的部落格模仿的PC端,大牛部落格地址) 移動端是自己寫的

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

  • 欣賞歌曲

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

  • 搜尋歌曲
    用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

  • 每日簽到

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

  • 個人資訊

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

  • VIP課程

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

VIP課程有HTML,CSS,JS課程;VIP使用者可以評論留言,可以刪除自己的留言;只有使用者登入並且付費購買後才能觀看.(僅供參考)

  • 搜尋頁面

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

有分頁功能

  • 404

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

後臺介面

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

後臺首頁運用了Echarts,將資料視覺化,API是真的強大.更多關於Echarts的學習,百度搜尋哦~

  • 新增文章

    用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

  • 編輯文章

    用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

  • 訂單管理

    用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

  • 歌曲管理

    用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

等等

原始碼在這裡

github專案地址

聯絡

如果大家有興趣,歡迎star. 關注公眾號:_facebook(web技術進階),檢視更多優質文章,歡迎大家加入我的前端交流群:866068198 ,一起交流學習前端技術。博主目前一直在自學Node中,技術有限,如果可以,會盡力給大家提供一些幫助,或是一些學習方法.

  • 公眾號
    用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統
  • 群二維碼
    用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

福利

有需要刷鑽,刷會員,刷騰訊視訊會員,漲粉絲等等相關意向的小夥伴們,可以訪問作者推薦的超值代刷網站:qq.usword.cn, 也可以掃描下方二維碼

用Node+VueCli+ElemenetUI+MongoDB教你開發綜合性教程網站,包括後臺管理系統

最後

If you have some questions after you see this article, you can contact me or you can find some info by clicking these links.

如果對你有幫助,請賞個star,謝謝哦~

相關文章