一、什麼是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:'密碼錯誤'}
}
}
})