node学习

说明

简单的说 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,'');
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值