13-02-uniapp供热服务接口配置

eggjs配置mysql数据库

npm i egg-mysql --save
 mysql:{
    enable: true,
    package: 'egg-mysql',
  },
 config.mysql={
     client: {
      // host
      host: '127.0.0.1',
      // 端口号
      port: '3306',
      // 用户名
      user: 'root',
      // 密码
      password: 'root',
      // 数据库名
      database: 'nideshop',
    },
    // 是否加载到 app 上,默认开启
    app: true,
    // 是否加载到 agent 上,默认关闭
    agent: false,
  }

egg.js的调试技巧

1 怎么查询错误

停掉数据库配置 报错
在这里插入图片描述
在这里插入图片描述

2 关于运行egg的技巧

npm run start 命令 正式上线(production)的时候我们才会npm run start

egg-scripts start --daemon --title=egg-server-project

在这里插入图片描述
配置端口号

config.cluster = {
    listen: {
      path: '',
      port: 7002,
      hostname: '0.0.0.0',
    }
  }

npm run stop
停止start
在这里插入图片描述
测试的时候怎么办?

npm run dev
在这里插入图片描述

配置跨域

说明: 跨域主要有两种,一种是前端代理跨域,一种后端跨域

1 前端代理配置跨域

2 后端跨域

egg.js跨域

npm/cnpm install egg-cors --save
  • 在egg项目中 config/plugins.js 添加以下配置
cors: {
		enable: true,
		package: 'egg-cors'
}
  • 在egg项目中 config/config.default.js 添加以下配置
module.exports = {
		const config = exports = {}
		config.security = {
		    csrf: {
		      enable: false,
		      ignoreJSON: true
		    },
		    domainWhiteList: [ '*' ], // 白名单
	  	};
		config.cors = {
			origin: '*', // 如果不写origin则会按照白名单中的域名允许跨域, * 代表允许所有的域名进行跨域请求
			allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH'
		}
	}

express跨域

egg.js解决跨域egg-cors的本质还是来自于设置跨域header头

//设置跨域访问
app.all('*', (req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
  res.header("X-Powered-By",' 3.2.1')
  res.header("Content-Type", "application/json;charset=utf-8");
  next();
});

分页

sql

select  *from  表名  limit 0,10;

select *from nideshop_goods limit 20,10;

select count(*)  from  nideshop_goods;

邮件

npm install nodemailer --save

关于发送邮件

短信(阿里云短信平台)

阿里云短信

npm install @alicloud/sms-sdk --save

上传

如果想要用hbuilderx去运行微信小程序开发者端,需要安全的端口

设置》通用设置》安全》服务端口

1 普通上传

1.1 egg上传
普通上传

2 express上传
前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <h3>文件上传:</h3>
    选择一个文件上传: <br />
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="content" />
        <br />
        <input type="submit" value="上传文件" />
    </form>
</body>
</html>

后端代码

var fs = require('fs');
var express = require('express');
var multer  = require('multer');

var router = express.Router();
var upload = multer({dest: 'upload_tmp/'});

router.post('/', upload.any(), function(req, res, next) {
    console.log(req.files[0]);  // 上传的文件信息

    var des_file = "./upload/" + req.files[0].originalname;
    fs.readFile( req.files[0].path, function (err, data) {
        fs.writeFile(des_file, data, function (err) {
            if( err ){
                console.log( err );
            }else{
                response = {
                    message:'File uploaded successfully',
                    filename:req.files[0].originalname
                };
                console.log( response );
                res.end( JSON.stringify( response ) );
            }
        });
    });
});

module.exports = router;

2 阿里云oss上传

为了节省服务器的空间 , 占带宽,思考:为了解决这个带宽问题

阿里云和七牛云提供一种服务, 叫对象存储oss

appid: LTAIC6ZMDHPvtv5K

appsecret: TsCBZKXlybXggr900DGqtLeN2QB17J

安装阿里oss上传相关的工具

npm install ali-oss -D

调试代码的技巧 要用外网的IP地址

ipconfig
在这里插入图片描述

android和微信小程序用本地127.0.0.1是不行的,需要用对外网的

3 base64图片上传

有些时候上传的图片是base64的图片,需要大家用js将原本的文件转成base64的图片, 前端的文件转成base64上传

引入自:https://www.cnblogs.com/juehai/p/9706141.html

后端:

app.post('/upload', function(req, res){
//接收前台POST过来的base64
var imgData = req.body.imgData;
//过滤data:URL
var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
var dataBuffer = new Buffer(base64Data, 'base64');
fs.writeFile("image.png", dataBuffer, function(err) {
if(err){
res.send(err);
}else{
res.send("保存成功!");
}
});
});

excel数据的读取

const Excel = require('exceljs');

excel的导入和导出

引自: https://www.jianshu.com/p/0f6a338c54f4

exceljs中文文档

依赖库引入
const fs = require('fs')
const Excel = require('exceljs')
初始化Excel
const workbook = new Excel.Workbook()
workbook.creator = 'test'
workbook.lastModifiedBy = 'test'
workbook.created = new Date()
workbook.modified = new Date()
生成一个工作表
let sheet = workbook.addWorksheet('2018-10报表')

# Add column headers and define column keys and widths
sheet.columns = [
  {header: '创建日期', key: 'create_time', width: 15},
  {header: '单号', key: 'id', width: 15},
  {header: '电话号码', key: 'phone', width: 15},
  {header: '地址', key: 'address', width: 15}
]
const data = [{
  create_time: '2018-10-01',
  id: '787818992109210',
  phone: '11111111111',
  address: '深圳市'
}]
# Add an array of rows
sheet.addRows(data)
生成excel文件
return await workbook.xlsx.writeFile('attachement/用户报表.xlsx').then( async () => {
  this.ctx.attachment(`用户报表.xlsx`)
  this.ctx.type = '.xlsx'
  this.ctx.body = fs.readFileSync(filePath)
}, function (err: any) {
  console.log(err)
})

QQ第三方登录 微信第三方登录

在这里插入图片描述

在微信小程序开发者工具中,项目中的mainfest.json有App模块配置中有OAuth(登录鉴权),可以打开qq和微信的登录配置。

第一步 uniapp官网提供的文档
https://ask.dcloud.net.cn/article/192

第二步 找到qq第三方登录入口
https://connect.qq.com/index.html

腾讯官方提供的一些接口
https://wiki.connect.qq.com/api%E5%88%97%E8%A1%A8

腾讯官方提供的接口
https://wiki.connect.qq.com/js_sdk%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E

单独的进行第三方登录静态页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript"  charset="utf-8"
        src="http://connect.qq.com/qc_jssdk.js"
        data-appid="101458871"
        data-redirecturi="http://169.254.201.186:7002/callback"
    ></script>
</head>
<body>
    <div>
       <button id="qqLoginBtn">qq登录</button>
    </div>
    <script>
     QC.Login({
		btnId:"qqLoginBtn"	//插入按钮的节点id
	 });
    </script>
</body>
</html>

后端代码

async callback(){
        const { ctx } = this;
        //接收access_token
        //console.log(location)
        //console.log(JSON.stringify(ctx.query.access_token)+"--------------------")
        
        //通过授权得到access_token 获取用户的openid
        var access_token=ctx.query.access_token
        var url="https://graph.qq.com/oauth2.0/me?access_token="+access_token
        
        const result = await ctx.curl(url);  //后端发送 http  get请求
        console.log(result.data.toString())  //callback( {"client_id":"101458871","openid":"BBB4A8B679A144168189DF4C27FA6132"} )
    
        var call = result.data.toString()
        var jsonz=JSON.parse(call.substring(9).substr(0,call.substring(9).indexOf(")")))
        var clientid = jsonz.client_id
        var openid   = jsonz.openid
        
        //再次再请求一次接口
        var url="https://graph.qq.com/user/get_user_info?access_token="+access_token+"&oauth_consumer_key=101458871&openid="+openid
        const res = await ctx.curl(url);
        var user = res.data.toString()
        console.log(user)
        //将数据存储到数据库中
        
        //var url="https://graph.qq.com/user/get_user_info?access_token="+access_token+"&openid=101458871"+"&oauth_consumer_key=12345"
        
        //通过后端发送get post请求
    
        var  location = "<script>window.location.href='http://localhost:8080/#/</script>"; 
        ctx.body =  location ;
    }

uniapp集成qq第三方登录的js-sdk的过程

1 在跟目录中新建一个index.html

2 需要配置
在这里插入图片描述

3 需要在

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cEGoAsdp-1605527554556)(.\img\image-20201116153320922.png)]
就已经在项目集成好了jssdk

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ox1WVKGc-1605527554562)(.\img\image-20201116153611971.png)]
https://graph.qq.com/oauth2.0/show?which=Login&display=pc&client_id=101458871&response_type=token&scope=all&redirect_uri=http%3A%2F%2Fwww.jingkela.com%2Fqqlogin.php

可道云桌面

官网

http://app.grfuwutong.com/kod/index.php?user/login

进入服务器端可道云 看到controllers 内包含所有的接口信息

账户密码
/www/wwwroot/app.grfuwutong.com/addons/zjhj_mall/core/modules/api/controllers/

客服系统

websocket的定义

阮一峰的教学日志: http://www.ruanyifeng.com/blog/2017/05/websocket.html

我的客服系统账号

http://kefu.jingkela.com/platform/passport/login.html
在这里插入图片描述

常用的第三方的客服系统,百度商桥,但是都要收费

基于nodeJS也有类似的客服系统(必须有redis内存数据库)

github: https://github.com/gytai/KeFu

使用 socket.io.js 实现 websocket 实时通讯

https://www.jianshu.com/p/725ff42c7af3

redis环境的搭建

小P面板
在这里插入图片描述

xxtea加密

XXTEA for Node.js

引入 https://github.com/xxtea/xxtea-nodejs/releases

var xxtea = require('xxtea-node');

var str = "Hello World! 你好,中国🇨🇳!";
var key = "1234567890";
var encrypt_data = xxtea.encryptToString(str, key);
console.log(encrypt_data);
var decrypt_data = xxtea.decryptToString(encrypt_data, key);
console.assert(str === decrypt_data);

微信公众号的开发

支付宝支付和微信支付

支付宝支付

微信支付

具体参见支付文档

egg.js集成微信微信支付 https://gitee.com/iteming/egg-wxpay/tree/master

抓包工具的使用

有没有另外一种办法,抓取数据包 , app跟服务器进行数据库 fiddler 抓包工具

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ynm3Sz92-1605527554565)(.\img\image-20201116104047134.png)]

wifi和手机相连 , 数据线跟手机相连

具体参照: https://www.cnblogs.com/yyhh/p/5140852.html

另外一个工具wireshark

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xJmBWkIZ-1605527554571)(.\img\image-20201116104403512.png)]

常用的攻击的手段

sql注入

csrf

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,

XSS

跨站脚本攻击, 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

http和https的区别

1 理解域名解析的过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-52K34UdD-1605872280214)(.\img\image-20201119100017137.png)]

2 http和https的概念

https微信小程序中必须要用的,接口必须是https , https相对于http更安全,防止流量劫持和篡改

3 怎么部署https

购买域名证书 SSL证书

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J8RLZex5-1605872280226)(.\img\image-20201119094255720.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZIwqUi4B-1605872280228)(.\img\image-20201119095152629.png)]

关于部署https: https://blog.csdn.net/qq_29058883/article/details/81031660

总结: 购买免费的证书 - 部署到域名上 - 下载针对不同域名对应(NginxAapache)的证书 - 见证书部署线上

IPv4 全球有13台跟节点的DNS域名服务器

下表是这些机器的管理单位、设置地点及最新的IP地址:

名称管理单位及设置地点IP地址
AINTERNIC.NET(美国,弗吉尼亚州)198.41.0.4
B美国信息科学研究所(美国,加利弗尼亚州)128.9.0.107
CPSINet公司(美国,弗吉尼亚州)192.33.4.12
D马里兰大学(美国马里兰州)128.8.10.90
E美国航空航天管理局(美国加利弗尼亚州)192.203.230.10
F因特网软件联盟(美国加利弗尼亚州)192.5.5.241
G美国国防部网络信息中心(美国弗吉尼亚州)192.112.36.4
H美国陆军研究所(美国马里兰州)128.63.2.53
IAutonomica公司(瑞典,斯德哥尔摩)192.36.148.17
JVeriSign公司(美国,弗吉尼亚州)192.58.128.30
KRIPE NCC(英国,伦敦)193.0.14.129
LIANA(美国,弗吉尼亚州)198.32.64.12
MWIDE Project(日本,东京)202.12.27.33

IPV6 国家有相应的预案

Restful接口

这是一种接口设计的理念

之前写接口的时候

域名?username=admin&password=123456

restful接口的规范 统一所有的接口一种写法 将接口全部都用 / 来去定义接口

域名 /username/admin/password/123456

参考:

阮一峰:http://www.ruanyifeng.com/blog/2014/05/restful_api.html

restful接口

css3多出文字用省略号表示

https://blog.csdn.net/qq_39905409/article/details/109219766

怎么将markdown文件转成HTML

1 可以通过vscode的一个插件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值