Node.js 插件 —— express 一個簡潔靈巧的node.js Web 應用框架
全局安裝依賴包
npm i express -g
npm i express-generator -g
express v4 之後,就需要手動安裝一下Generator
檢測express是否安裝成功:express --version
, 如果出現版本號,則安裝完成。
express 創建工程
- 打開終端,選擇路徑到您想要創建的位置;
- 使用命令創建項目
express project_name
; - 下載相關依賴包
npm install
在project_name目錄下執行這個命令; - 依賴包下載完成後,在project_name目錄下執行
npm start
啓動項目; - 在瀏覽器輸入地址:
127.0.0.1:3000
,如果能打開,那麼就大功告成了,最簡單的服務器就可以使用了 - 然後這個工程就初始化完成了;
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(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;