Node.js 插件 —— express 、token驗證、CORS跨域

Node.js 插件 —— express 一個簡潔靈巧的node.js Web 應用框架

全局安裝依賴包

npm i express -g

npm i express-generator -g express v4 之後,就需要手動安裝一下Generator

檢測express是否安裝成功:express --version, 如果出現版本號,則安裝完成。

express 創建工程

  1. 打開終端,選擇路徑到您想要創建的位置;
  2. 使用命令創建項目 express project_name;
  3. 下載相關依賴包 npm install 在project_name目錄下執行這個命令;
  4. 依賴包下載完成後,在project_name目錄下執行 npm start 啓動項目;
  5. 在瀏覽器輸入地址: 127.0.0.1:3000,如果能打開,那麼就大功告成了,最簡單的服務器就可以使用了
  6. 然後這個工程就初始化完成了;

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hI9BvjPQ-1572777998655)(express_files/1.jpg)]

目錄解釋

- bin:存放可執行文件(服務器基礎配置www)
- public:存放 image、css、js 等文件
- routes:存放路由文件
- views:存放視圖文件或者說模版文件
- app.js:啓動文件,或者說入口文件
- package.json:存儲着工程的信息及模塊依賴,當在 dependencies 中添加依賴的模塊時,運行 npm install,npm 會檢查當前目錄下的 package.json,並自動安裝所有指定的模塊
- node_modules:存放 package.json 中安裝的模塊,當你在 package.json 添加依賴的模塊並安裝後,存放在這個文件夾下

在bin/www 中配置自動 “運行時自動打開瀏覽器” 只需要添加兩句代碼

var cp = require("child-process"); // 引入 child-process 模塊
cp.exec("start http://127.0.0.1:3000"); // 配置項目啓動後,自動在默認瀏覽器打開該窗口

app.js 解釋

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

// 導入路由依賴模塊
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

/// 使用中間件形式實現跨域訪問(自己添加)
app.use("*", function (req, res, next) {
  //設置允許跨域的域名,*代表允許任意域名跨域
  res.header("Access-Control-Allow-Origin", "*");
  //允許的header類型
  res.header("Access-Control-Allow-Headers", "content-type");
  //接收ajax請求手動提交的cookie信息
  res.header("Access-Control-Allow-Credentials", true);
  //跨域允許的請求方式 
  res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");
  if (req.method == 'OPTIONS')
    res.sendStatus(200); //讓options嘗試請求快速結束
  else
    next();
});


/////////////////////////////////////////////////////////////////////////// token驗證, 需要用到下面的token.js
app.use(function (req, res, next) {
  console.log("req.url", req.url)
  if (req.url == "/users/login" || req.url == "/users/register") { //如果是登錄或者註冊請求,直接通過驗證
    next();
  }
  else { //表示非登錄請求,需要驗證token
    //獲取前端傳來的token,開始驗證,如果驗證通過運行進入下一步,否則直接解決提供服務
    var token = req.query.token || req.body.token;
    tokenobj.verifyToken(token, function (bo) {
      if (bo) {
        console.log("驗證成功")
        next();
      }
      else {
        console.log("token異常")
        res.send({ success: false, msg: "token無效,請重新登錄" });
      }
    });
  }
});


// 根據用戶輸入的地址,進入不同的路由文件
// 列如地址:127.0.0.1:3000/users/login.html;
// js 就會根據127.0.0.1:3000之後的內容(/users/login.html)進行字符串匹配,找到一個匹配最完全的項(/users),進入相應的路由文件(usersRouter)
app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

token.js token驗證

var jwt = require("jsonwebtoken");

var tokenObj = {
    createToken: function (cont, time) {
        var content = cont //token存儲的內容
        var secretOrPrivateKey = 'blogzl.com' // 這是加密的key(密鑰或私鑰) 
        var token = jwt.sign(content, secretOrPrivateKey, {
            expiresIn: time // 過期時間
        })
        return token;
    },
    verifyToken: function (token, fn) {
        var secretOrPrivateKey = 'blogzl.com' // 這是加密的key(密鑰或私鑰)
        jwt.verify(token, secretOrPrivateKey, function (err, decode) {
            if (err) { // 當token過期,或這是一個僞造的token,或這是無效的token時會觸發此邏輯 
                console.log(err)
                fn(false);
            } else {
                console.log(decode);
                fn(true);
            }
        })
    }
}
module.exports=tokenObj;
發佈了10 篇原創文章 · 獲贊 2 · 訪問量 3762
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章