Node学习

绝对路径的写法

const path = require('path');
path.join(_dirname+'路径名');
快捷键:
1. 使用esc键,快速清空当前已经输入的命令。
2.  2. 输入cls,可以清空终端。
// 获取文件名
path.basename('文件名');
// 获取后缀名
path.extname('文件名');
http模块
const http = require('http');
// 1.创建服务器
const server = http.createServer();
// 2.request请求,客户端请求服务器,触发request事件。
// req是客户端发来的数据
server.on('request',(req,res)=>{
  const url = req.url;
  // 判断路径
  if(url === '/' || url === '/about.html')
    var content = '<h1>h1</h1>';
  if(url === '/index.html')
    var content = '<h2>h2</h2>';
  // 设置发给客户端的内容为utf-8
  res.setHeader('Content-type','text/html;charset=utf-8');
  res.end(content);
})

// 调用这个方法,启动服务器。
server.listen(8080,()=>{
  console.log('server running at http://127.0.0.1:8080')
})
如果以后上线的时候想要放弃一些包的话,那么就要使用gitignore来剔除掉我们所没有用到的包。
# 忽略 node_modules目录
/node_modules
/unpackage/dist

(进行占位)
在这里插入图片描述

切换包

在这里插入图片描述

通过模块切换包


 1. npm i nrm -g
 2. nrm ls
 3. nrm use taobao

params和query的区别

?代表着query
:代表着params

// http:127.0.0.1:8080?name=li query
// http:127.0.0.1:8080/:id params
通过express创建服务器
// 引入express 模块
	const express = require('express');
	const port = 8080;
2.创建app
	const app = express();
3.get请求
	app.get('/',(req,res)=>{
	const data = {name:'long',age:20};
	res.end(JSON.stringify(data));
	console.log(req.params)
	})
4.启动服务器
	app.listen(port,()=>{
  	console.log('http://127.0.0.1:8080');
	})

路由模块

  1. 创建路由模块
		const express = require('express');
		// 大写
		const router = express.Router();
		router.get('/:id',(req,res)=>{
		  console.log(req.params);
		})
		router.post('/',(req,res)=>{
		  console.log(1111);
		})
		module.exports = router;
  1. 引入路由模块
// 创建路由模块
const router = require('./3.js');
  1. 注册路由模块
// 注册并使用路由模块
app.use(router);

中间件

4.中间件(将客户端得到的数据进行转换)

// 中间件
const mm = function(req,res,next){
  console.log(1111);
  next();
}
// 全局中间件
app.use(mm);
// 局部中间件
app.get('/',mm,(req,res)=>{});
  1. 应用中间件
  2. 路由中间件
  3. 错误中间件(err,req,res,next) (必须用到应用中间件 同时应在get方法之后来捕获错误)
  4. app.get('/',(req,res)=>{ throw new Error('你说啥呢'); }) // 写在后面进行捕获错误 app.use(judgeError);

app.use来触发以下的东西 配置项都配置到路由前面
express.static( 快速托管静态资源)
express.json(解析json数据)
express.urlencoded(解析 url-encoded的数据)

req.on('某数据',()=>{}) ==>监听这个数据

跨域

## 跨域解决方法
  1. Cors
  2. Jsonp(只支持GET请求)
  3. proxy

cors的使用方法(有兼容性)

  1. npm i cors
  2. const cors = require(‘cors’);
  3. app.use(cors());

解决跨域问题

通过vue自带的proxy来解决跨域问题

  devServer: {
    proxy: {
      '/api': {
        target: 'http://web.juhe.cn:8080',
        changeOrigin: true,
        pathRewrite: {
          '^/api': '/'
        }

      }
    }
  }

数据库模块

// 引入数据库模块
const mysql = require('mysql');
// 通过这个模块和自己的数据库连接
const db = sql.createPool({
  // ip地址
  host:'127.0.0.1',
  // 用户名
  user:'root',
  // 密码
  password:'admin123',
  // 数据库表名
  database:'my_db_01'
  
##### insert写法
 1. // 第一种写法
	const sqlStr = 'insert into users(username,password,status) values (?,?,?)';
 2. // 第二种写法 这样写的话下面的dataArr就不需要的了,直接把sqlNewData写到dataArr的位置就行了
	const sqlyiyi = 'insert into users set ?';
const dataArr = [
  sqlNewData.username,
  sqlNewData.password,
  sqlNewData.status
];
// 测试与自己的数据库是否连接成功s
// query('查询语句',回调函数)
db.query(sqlStr,dataArr,(err,results)=>{
  if(err) return console.log(err.message);
  console.log(results);
})
#### update写法
 3. // 第一种写法
	const sqlStr = 'update users set password=?,username=? where id=?'
 4. // 第二种写法
	const sqlStr = 'update users set ? where id=?' 
// query('查询语句',回调函数)
db.query(sqlStr,[sqlNewData.password,sqlNewData.password,sqlNewData.id],(err,results)=>{
  if(err) return console.log(err.message);
  console.log(results);
})

body-parser模块用来请求体的解析

github
node.js body 解析中间件
处理程序之前,在中间件中对传入的请求体进行解析(response body)
body-parser 提供四种解析器
JSON body parser
Raw body parser
Text body parser
URL-encoded form body parser

利用jwT生成token

安装包

npm i jsonwebtoken express-jwt
jsonwebtoken 生成token字符串
jwt将生成的字符串转化成json对象
const express = require('express');
// 生成一个服务器
const app = express();
// 生成jwt字符串
const jsonwebtoken = require('jsonwebtoken')
// 将jwt字符串解析成json对象(中间件)
const expressjwt = require('express-jwt')
// 解密同时将数据生成json对象
app.use(expressjwt({
  secret:secretKey
}))
// 通过上述的use,可以将解析到的数据放到req.user身上
// 定义密钥
const secretKey = 'lcl 是大帅哥》《!';
app.get('/',(req,res)=>{
  res.send({
    status:200,
    meg:'登录成功',
    // 用户的信息对象,加密密钥,配置对象
    token:jsonwebtoken.sign({
      username:'li',
      age:12
    },secretKey,{
      expiresIn:'30s'
    })
  })
})
// 客户端发送数据就是authorization发送token值 开头得加上Bearer + 回车(postman里面加上)
// 通过错误中间件来捕获错误

生成二维码

从后台获取字符串url从而生成二维码图片

  1. 通过npm包的qrcode来进行二维码的生成。
import QRCode from 'qrcode'

// With promises
QRCode.toDataURL('I am a pony!')
  .then(url => {
    console.log(url)
  })
  .catch(err => {
    console.error(err)
  })

// With async/await
const generateQR = async text => {
  try {
    console.log(await QRCode.toDataURL(text))
  } catch (err) {
    console.error(err)
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值