node記錄

一、什麼是nodejs

電腦是不能識別js語言的,需要通過node的轉化才能識別,而node是基於chrome v8環境

二、運行

運行環境下: node xxxx.js

四、模塊化

模塊即是文件
導出:
moudle export = {test,test2}

引入:
let mytest =  require('./stuff')

mytest.test() 

五、event事件

eventEmitter是node的內置模塊,註冊事件都需要用到

//映入
var events = require('events')
//實例化
var myEmitter = new events.EventEmitter()

//註冊事件
myEmitter.on('test',function(msg){
     setImmediate(function(){
           console.log(msg)  //你好啊
     })
})
//事件調用
myEmitter.emit('test',"你好啊")

六、文件讀取(fs模塊)

//映入fs模塊
var fs = require('fs')

fs.readFile("路徑",utf8,function(){
    console.log('已讀取完')
    
}) //異步讀取

fs.writeFile("文件路徑",data) //寫入文件

七、創建本地服務器(http模塊 )

//引入
var http = require('http')
//創建一個服務器
var server = http.createServer(function(req,res){
    res.writeHead(200,{'Content-type':'text/plain'})
    res.end("創建了一個服務器")  //返回給瀏覽器一個文本來顯示
})
//監聽服務器地址和端口
server.listen(8888,'127.0.0.1')

八、文件流

stream、pipe(管道)

九、安裝插件時,先創建packge.json文件

1、執行npm init  //全部直接回車
2、npm install xxx--save

十、工具nodemon

啓動工具,每次改變自動重啓服務
安裝(全局):cnpm install -g nodemon --save-dev
使用:nodemon  xxx  

十一、express

基於node的輕量級、高效的web框架
安裝: npm install express

//簡易型服務模板
var express = require('express')
var myController = require('./controller/mycontroller')
var app = express()
app.set('view engine','ejs')
app.use(express.static('./public'))
myController(app)
app.listen(3000)

十二、創建node項目步驟

1、新建一個文件夾toapp,並用終端打開此文件夾
2、npm init  //創建packge.json文件
3、cnpm install express --save-dev  //安裝express框架
4/cnpm install ejs body-parser --save-dev  //安裝對ejs的模板引擎,body-parser對數據的解釋

十三:css

.buttons button:last-of-type:before{ //最後一個button

}

十四、爬蟲

先安裝  cnpm install cheerio  //類似於jq

在pachong.js中:

//1、引入heep對象
const http = require('http')
//發送請求
http.get('http://bbs.itheima.com/forum-401-1.html',function(req,res){
    //獲取html數據
    var html=''
    req.on('data',function(data){
        html+=data
    })
    req.on('end',function(data){
        getTitle(html)
    })
})
function getTitle(html){
    //引入模塊
    const  cheerio = require('cheerio')
    const $ = cheerio.load(html,{decodeEntities:false})
    $(".xst").each(function(index,item){
        console.log($(item).html())
    })
}

運行:node pachong.js

十五、創建koa項目

1、創建空文件夾在此路徑下 cnpm i
2、安裝koa和koa-router : cnpm install koa koa-router --save

15.1、用koa搭建服務

//引入模塊
const Koa = require("koa")
const Router = require("koa-router")
//實例化
const app = new Koa()
const router = new Router()
//配置路由
app.use(router.routes()).use(router.allowedMethods())
//路由
router.get("/",async ctx=>{
    ctx.body = {msg:"你好 koa"}
})
//設置端口
const port = process.env.PORT||5000;
//監聽服務
app.listen(port,()=>{
    console.log(`開啓了服務:${port}`)
})

十六、安裝mongoose

在線mongoosdb:https://cloud.mongodb.com
1、cnpm install mongoose --save

app.js中

const mongoose = require("mongoose")
//鏈接數據庫
mongoose.connect('mongodb+srv://test:[email protected]/test?retryWrites=true&w=majority',{ useNewUrlParser: true })
.then(()=>{
    console.log("連接數據庫成功")
})
.catch(err=>{
    console.log("連接失敗",err)
})

十七、

安裝:獲取前端以參數傳過來的東西
cnpm i koa-bodyparser --save

引入
const bodyParser = require('koa-bodyparser')
使用
app.use(bodyParser());

十八、加密後存到數據庫

1、安裝
cnpm install bcryptjs --save

引入:
const bcrypt = require('bcryptjs');

//加密,給newUser中的password加密
await bcrypt.genSalt(10, (err, salt) =>{
      bcrypt.hash(newUser.password, salt,(err, hash)=> {
            console.log(hash)
              if(err) throw err;
              newUser.password = hash
      });
});

十九、註冊

const Router = require('koa-router')
const router = new Router()
const bcrypt = require('bcryptjs');
const User = require("../../model/Users")
//測試接口/路由
router.get("/test",async ctx=>{
    ctx.status = 200
    ctx.body={msg:"這是test頁面。。。"}
})
//註冊路由
router.post('/register',async ctx=>{
    console.log(ctx.request.body)
    //查數據數據庫中是否存在
    const findResult =await User.find({email:ctx.request.body.email})
    if(findResult.length>0){ //數據庫中已經存在
        ctx.status = 500
        ctx.body={email:'郵箱已經被佔用'}
    }else{
        const newUser = new User({
            name:ctx.request.body.name,
            password:ctx.request.body.password,
            email:ctx.request.body.email
        })

        //加密
        await bcrypt.genSalt(10, (err, salt) =>{
            bcrypt.hash(newUser.password, salt,(err, hash)=> {
                console.log(hash)
                if(err) throw err;
                newUser.password = hash
            });
        });

        //存到數據庫
        await newUser.save().then(user=>{
            ctx.body = user
        })
        .catch(err=>{
            console.log(err)
        })
        ctx.body = newUser
    }
})
module.exports = router.routes()

二十、登錄生成token

生成token插件:jsonwebtoken
安裝:cnpm i jsonwebtoken
引入:const jwt = require("jsonwebtoken")
router.post('/login',async ctx =>{
    //查詢
    const findRsult = await User.find({email:ctx.request.body.email})
    if(findRsult.length==0){
        ctx.status=404
        ctx.body={email:'用戶不存在!'}
    }else{
        var result = bcrypt.compareSync(ctx.request.body.password, findRsult[0].password); 
        if(result){
            //返回token
            const payload = {id:findRsult[0].id ,name:findRsult[0].name,avatar:findRsult[0].avater}
            const token = jwt.sign(payload,keykenkey.keykenkey,{expiresIn:3600})


            ctx.status=200
            ctx.body={success:"登錄成功",token:"Bearer "+token}
        }else{
            ctx.status=400
            ctx.body={password:'密碼錯誤'}

        }
    }
})

 

發佈了75 篇原創文章 · 獲贊 26 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章