node记录、下载和安装步骤

node的下载和安装步骤

国内下载地址:
https://nodejs.org/download/release/ (选msi后缀的下载,双数的问题)

win更新node版本步骤:

1、查看现在的版本和安装的位置,新版的node要与旧的安装位置一样

 

2、安装新版的node,选择旧的安装地址,一路next则ok

详细的node接口、链接数据库封装:如何使用nodejs写一个接口 - 知乎

node国内下载/旧版本:如何使用nodejs写一个接口 - 知乎写前端的朋友不知道如何拓展自己在后端的能力,那么nodejs是你的不二选择,废话不多说,直接进入正题。 这里我演示的是nodejs+mysql,别的数据库也类似。 首先我们需要做两件事,下载nodejs和mysql安装,这些基本…https://zhuanlan.zhihu.com/p/56030432

Node.js Mirror

node安装和配置环境变量步骤:

node安装以及环境变量配置 - 夏小念 - 博客园

如是需要更换版本提示Later version of Node.js is already installed. Setup will now exit,找到原版本的exe,双击再安装再选择remove卸载即可

一、什么是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(管道)

path模块:操作路径,获取当前路径、合并字符串为路径、获取扩展名等
let pateh_  = require(path)

os模块:获取系统的信息,如cpu、系统类型等

九、安装插件时,先创建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)

--------------------------------------------
//cnpm install -g express  安装
 express在4.0后把命令工具单独分了出来,安装完express后,还得安装express-generator
//npm install express-generator -g

法一:
在指定目录下 
express myapp //创建项目
cd myapp
cnpm install
cnpm start  //启动 或: nodemon ./bin/www
localhost:3000   //浏览器访问

法二:
--------------------------------------------
express -e myapp  //-e全称为 --view=ejs ,myapp是要创建项目的名称
cd myapp
npm install 
npm start

app.js文件下:
app.get("/test",async (req,res)=>{
    let str = "select * from user limit 0,2"
    let res_ =await mysqlQuery(str)
    console.log(res_)
    res.send(Array.from(res_))  //响应为json
})

十二、创建node项目步骤、快速搭建一个简单的api服务

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对数据的解释

在toapp文件下新建index.js:
const express = require('express')
const app = express()
app.use((request,response,next)=>{
    console.log('有人请求了');
    next()
})
app.get('/students',(request,response)=>{
    const students = [
        {id:'1',name:'小明',age:18}
    ]
    response.send(students)
})
app.listen('5000',(err)=>{
    if(!err) console.log('连接成功啊!');
})

启动命令:
node index.js

访问会返回students数据json:
http://localhost:5000/students

常用node插件

npm i -S body-parser  //回去传过来的参数
npm i -S cors //处理跨域
npm install -g nodemon --save-dev //自动重启
npm i -S express-validator  //快速验证是否符合某种格式,如是否是邮箱
npm i -S jsonwebtoken  //生成jwt token

十三: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


//方法二、模拟打开浏览器来爬虫
安装puppeteer

let puppeteer = require('puppeteer')
async function test(){
    //实例化浏览器
    let browser = await puppeteer.launch({headless:false})
    //打开页面
    let page = await browser.newPage()
    //打开指定的网址
    await page.goto('https://www.1905.com/')
    //截图
    await page.screenshot({path:'screen.png'})
    //查找元素
    page.$$eval('.head-bar li a',(element)=>{
        console.log(element)
        element.forEach((item,i)=>{
            console.log(item.innerHTML) //会在打开的控制台输出
        })
    })
}
test()

十五、创建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:test1234@cluster0-up08u.mongodb.net/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
      });
});

//传字符串、加盐md5加密
function jiami(str){
    let salt = 'dgfdsgfdsfdbsfbfdsad'
    let obj = crypto.createHash('md5')
    str = str+salt
    obj.update(str)
    return obj.digest('hex')
}

十九、注册

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:'密码错误'}

        }
    }
})

npm命令:

npm install 包名 --save-dev (-d) //下载到开发环境
npm install 包名 --save  (-s)  //下载到生产环境
-g  //全局安装
npm list  //查看安装了什么
npm --help  //查看命令行
npm update 包名  //更新某个包
npm uninstall 包名  //卸载
 

上传自己封装方法的js文件到npm库

1、npm官网注册账号和绑定邮箱(密码要记住)
2、命令行进入封装方法的js文件夹
一次输入以下命令:
npm init  //填写信息,会生成pajson.json文件
npm login  //输入账号密码邮箱
npm publish  //上传

npm xxx  //npm init时输入的name 就会下载下来

数据库查询语句

//查询所有从score表,关联student表且score.id = student.id
select * from score INNER JOIN student on score.id = student.id
where student.name in (select * from student where age<20)



 

视图:查询语句的衍生出的表,具有表结构,可以像查表一样

事务:

事务:中间有出错,怎个操作都会失效
begin; //开启事务
xxxx  //数据库操作语句
xxx
xxx
COMMIT; //提交

使用mysql

//安装 cnpm install mysql --save

//使用
let mysql = require("mysql")
let options ={
    host:"localhost",
    user:"jhlproject",
    password:"123456",
    database:"jhlproject"
}
let con = mysql.createConnection(options)
con.connect(err=>{
    if(err){

    }else{
        console.log("数据库连接成功")
    }
})
function sqlQuery(strsql,arr){
    return new Promise((resolve,reject)=>{
        con.query(strsql,arr,(err,results)=>{
            if(err){
                reject()
            }else{
                resolve(results)
            }
        })
    })
}
module.exports = sqlQuery

get和post

app.js中:
app.set("views","views")  //设置视图目录在views下
app.set("view engine","ejs") //设置模板引擎
app.engine("ejs",ejs.__express) //定义模板引擎
app.use(express.urlencoded({ extended: true }));  //post需要加入

app.get("/login",(req,res)=>{ //浏览器进入login时,返回login.ejs页面
    res.render("login.ejs")
})

app.post("/login",(req,res)=>{ //form提交是post,req.body拿到参数,get则是req.query拿
    console.log(req.body)
    // res.join(Array.from(result))
    res.send("登录成功")
})

中间件

router下新建api.js(引入express):
let api = express.router


处理跨域中间件:
api.use((req,res,next)=>{
    res.append("Access-Control-Allow-Origin","*")
    res.append("Access-Control-Allow-Content-Type","*")
    next()  //允许执行下一步
})

api.get("/list",(req,res)=>{
    res.send("这是/book下的/list")
})
moudle.export = api

app.js中:
import api = require("../router/api.js")
app.use("/book",api)

cookie

app.js中:
let cookieParser = require('cookie-parser')
app.use(cookieParser())  //cookie的中间件

中间件中
cookierouter.get("/cookieurl",(req,res)=>{
    console.log(req.cookies.login)//获取传过来的cookie
    res.cookie("login","true",{maxAge:10*1000,httpOnly:true}) 
    res.send("设置cookie完成")
})
// 控制台输入document.cookie可看到cookie,设置httponly则关闭
//maxAge 设置多少毫秒后失效

session

安装:cnpm install express-session
let session = require('express-session')
app.use(session({ 
    secret:"ddsfdsf",  //随机字符
    resave:false,   //强制保存
    saveUninitialized:true, //是否保存初始化值
    cookie:('name','value',{maxAge:5*10*1000})
}))
//用到post时
app.use(express.urlencoded({ extended: true }));

app.get("./login",(req,res)=>{
    req.session.username="小明"  //设置session
    if(req.session.username="小明"){  //从cookie中取
    }
})

上传文件

安装:cnpm install multer --save
app.js中引入,并use它的中间件

app.use("/uploap",upload.single("myfile"),(req,res,next)=>{
    console.log(req.file) //获得上传的信息
})

下载

res.download("地址") //地址是./public/....

完整返回json数据的api例子:

router.get('/api/userlist',async (req,res,next)=>{
  let page = parseInt(req.query.page) || 1
  let limtnum = parseInt(req.query.limit) || 10
  let str = 'select * from userinfo limit ?,?'
  let result = await strmysql(str,[page,limtnum])
  let option ={
    "code": 0,
    "msg": "",
    "count": 1000,
    "data":Array.from(result)
  }
  res.json(option)
})

或者:
res.status(200).json({xx:xx})

//发送get请求即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值