说明
简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
安装配置
Node.js安装包地址 https://nodejs.org/en/download/
介绍几个插件
express
》安装express npm install express -D
》使用express
const express=require("express");
let server=express();
server.listen(8080);
uuid
》安装uuid npm install uuid -D
》创建个uuid
import { v4 as uuidv4 } from 'uuid';
uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
个人常用
import { v4 as uuidv4 } from 'uuid';
uuidv4().replace(/\-/g,''); // ⇨ '9b1deb4d3b7d4bad9bdd2b0d7b3dcb6d' 32位
crypto-js
》安装crypto-js npm install crypto-js -D
》使用
import sha256 from 'crypto-js/sha256'; import hmacSHA512 from 'crypto-js/hmac-sha512'; import Base64 from 'crypto-js/enc-base64'; const message, nonce, path, privateKey; // ... const hashDigest = sha256(nonce + message); const hmacDigest = Base64.stringify(hmacSHA512(path + hashDigest, privateKey));
个人常用
function md5(str){
return (cryptomd5(str)).toString()
}
mysql
》安装 npm install mysql -D
》使用
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host : 'example.org',
user : 'bob',
password : 'secret',
database : 'my_db'
});
cookie-parser
》安装 npm install cookie-parser -D
》使用
依据express做应用
var express = require('express')
var cookieParser = require('cookie-parser')
var express= express()
express.use(cookieParser())
个人常用
//cookie
const express=require("express");
const cookieParser=require("cookie-parser");
let server=express();
server.listen(8080);
server.use(cookieParser(require("./serct/cookie_key")));
//cookie_key.js
module.exports=[
'122sdsdasdas',
'122sds3dasdas',
'122sdsd3asdas',
'122sds2dasdas',
'122sds3dasdas',
'122srdsrdasdas',
'122sds34dasd5as'
];
cookie-session
》安装 npm install cookie-session -D
》使用
依据express做应用
var cookieSession = require('cookie-session')
var express = require('express')
var app = express()
app.set('trust proxy', 1) // trust first proxy
app.use(cookieSession({
name: 'session',
keys: ['key1', 'key2']
}))
app.use(function (req, res, next) {
// Update views
req.session.views = (req.session.views || 0) + 1
// Write response
res.end(req.session.views + ' views')
})
app.listen(3000)
个人常用
//session
const express=require("express");
const cookieSession=require("cookie-session");
let server=express();
server.listen(8080);
server.use(cookieSession({
keys:require("./serct/cookie_key")
}));
//cookie_key.js
module.exports=[
'122sdsdasdas',
'122sds3dasdas',
'122sdsd3asdas',
'122sds2dasdas',
'122sds3dasdas',
'122srdsrdasdas',
'122sds34dasd5as'
];
consolidate
》安装 npm install consolidate -D
》使用
个人常用
const express=require("express");
const consolidate=require("consolidate");
let server=express();
server.listen(8080);
server.set("html",consolidate.ejs);
server.set("view engine",'ejs')
server.set("views","./template");
ejs页面类似于html
<% if (user) { %> <h2><%= user.name %></h2> <% } %>
<tbody>
<% data.forEach(json=>{ -%>
<tr>
<td>
<%= json.ID %>
</td>
</tr>
<% }) %>
</tbody>
demo
//server.js
const express=require("express");
const mysql=require("mysql");
const bodyParser=require("body-parser");
const multer=require("multer");
const cookieParser=require("cookie-parser");
const cookieSession=require("cookie-session");
const consolidate=require("consolidate");
const config=require('./config');
//搭建服务器
let server=express();
server.listen(config.port);
let db=mysql.createPool({host:config.mysql_host,user:config.mysql_user,password:config.mysql_password,port:config.mysql_port,database:config.mysql_database});
server.use((req,res,next)=>{
req.db=db;
next();
})
//中间件
//普通POST数据
server.use(bodyParser.urlencoded({extended:false}));
//文件POST数据
let multerObj=multer({dest:'./upload/'});
server.use(multerObj.any());
//cookie
server.use(cookieParser(require("./serct/cookie_key")));
//session
server.use(cookieSession({
keys:require("./serct/cookie_key")
}));
//模板
server.set("html",consolidate.ejs);
server.set("view engine",'ejs')
server.set("views","./template");
//请求
let admin_router=express.Router();
server.use("/admin/",admin_router);
// let www_router=expres.Router();
server.use("/admin/",require("./routers/admin"));
server.use("/",require("./routers/www"));
//静态文件
server.use(express.static("./www/"));
//router/admin.js
const express=require("express");
const config =require("../config");
const common=require("../libs/common");
let router=express.Router();
module.exports=router;
//校验用户身份
//进入所有的admin相关的页面之前,都要校验用户身份-如果没登陆过,去登陆(/admin/login)
//"所有的"
router.use((req,res,next)=>{
console.log(req.url);
if(!req.session['admin_ID']&&req.url!='/login'){
res.redirect('/admin/login')
}else{
next();
}
})
//展现login页面
router.get("/login",(req,res)=>{
res.render("login",{error_msg:''});
})
//提交登录请求
router.post("/login",(req,res)=>{
let {username,password}=req.body;
let error_msg="";
console.log("username:"+username)
console.log("password:"+password)
if(username==config.root_username){
console.log("config.root_username:"+config.root_username)
if(common.md5(password)==config.root_password){
console.log("超级管理员");
req.session['admin_ID']=1;
res.redirect("/admin/");
}else{
console.log("超级管理员登陆失败");
error_msg="用户名活密码错误"
res.render("login",{error_msg});
}
}else{
req.db.query(`SELECT * FROM admin_table WHERE username='${username}'`,(err,data)=>{
if(err){
error_msg='数据库出错,请稍后重试'
}else if(data.length==0){
error_msg='用户名或密码错误';
res.render("login",{error_msg});
}else{
console.log("11111111")
if(data[0].password==common.md5(password)){
req.session.admin_ID=data[0].ID;
console.log("普通管理员登录成功")
res.redirect("/admin/");
success=true;
}else{
error_msg='用户名或密码错误';
res.render("login",{error_msg});
}
}
})
}
})
router.get("/",(req,res)=>{
res.redirect("/admin/house");
})
router.get("/house",(req,res)=>{
req.db.query(`SELECT ID,title,tel,main_img_path FROM house_table`,(err,data)=>{
if(err){
res.sendStatus(500);
}else{
res.render("index",{data});
}
})
})
//template/login.ejs
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
</head>
<body>
哈哈哈
<% if(error_msg!=""){ %>
<div class="alert alert-danger alert-dismissible" role="alert">
<%= error_msg %>
</div>
<% } %>
<form method="post" action="/admin/login">
<label>用户名</label>
<input type="text"name="username" placeholder="请输入用户名" id="username"/>
<label>密码</label>
<input type="password" name="password" placeholder="请输入密码" id="password"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
//libs/common.js
const cryptomd5=require("crypto-js/md5");
const {v4:uuidv4} = require("uuid");
module.exports={
md5(str){
return (cryptomd5(str)).toString()
},
createuuid(){
return uuidv4().replace(/\-/g,'');
}
}