前言一般在我们项目开发中,一般会有以下3个环境开发环境也叫测试环境(test)RC环境也叫预发布环境(rc)线上环境(production)场景那么有一种情况是我们需要在不同环境下区分不同的api接口例如测试环境(test) api=test.ydhtml.com预发布环境(rc) api=rc.ydhtml.com线上环境(production) api=ydhtml.com创建环境接下来我们在
不知道用了express.js的你有没有这样的疑问:app.use为什么可以添加一个又一个中间件?connect是如何区分普通中间件和错误中间件的?中间件处理函数中的next指代的又是什么?通过阅读express源码,来解释上面的三个问题。app.use为什么可以添加一个又一个中间件?app.use(function middleware1(req, res, next) { // middl
一:创建项目使用django-admin命令构建项目django-admin startproject HelloWorld如上使用django构建了一个HelloWorld项目二:项目结构我们可以看到HelloWorld项目结构如下|-- HelloWorld | |-- __init__.py | |-- settings.py | |-- urls.py | `--
{% load staticfiles %} <link rel="stylesheet" type="text/css" href="{% static 'css/reset.css' %}">#base.html {% block custom_bread %} {% endblock %}#org-list.html {% block custom_bread %} &l
只发送事件socket.emit('action');表示发送了一个action命令,命令是字符串的,在另一端接收时,可以这么写:socket.on('action',function(){...});发送事件和数据socket.emit('action',data);表示发送了一个action命令,还有data数据,在另一端接收时,可以这么写:socket.on('action',functio
sdk 二次封装为了更好的区分功能,我分成了六个 js 文件config.js 音视频与呼叫邀请配置store.js 实现音视频通话的变量rtc.js 音视频逻辑封装live-code.js 微信推拉流状态码rtm.js 呼叫邀请相关逻辑封装util.js 其他方法config.js配置 sdk 所需的 AppId,如需私有云可在此配置RTC 音视频相关RTM 实时消息(呼叫邀请)mod
WebSocketWebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客服端的浏览器,这种方式有一个很大的弊端,就是会占用很多的带宽。最新的轮询效果是Comet – 用了AJAX。但这种技术虽然可达到
websocket的实现有很多种,像ws和socket.io,这里使用的是socket.io来实现多房间的效果。这里的使用没有使用socket.io官方提供的namespace和room,而是完全通过一个namespace实现的。数据传输使用JSON格式,封装了消息规范消息体规范const actionType = { join:'JOIN',//加入 leave:'LEAVE',
Spring事务回滚的前提是你当前使用的数据库必须支持事务,比如MySQL的Innodb是支持的,但Mysaim则是不支持事务的。方法一使用 @Transaction 来配置自动回滚,可以配置在类上,也可以配置在方法上(作用域不同),但对final或private修饰的方法无效,且该类必须是受spring所管控的,也就是被已经被注入的类,而不是new出来的类。若配置在方法上,则该方法被加上了事务若
众所周知,日常配置git用户信息的方式通常是:git config --global user.name '用户名' git config --global user.email '邮箱'全局方式配置,写入到 ~/.gitconfig文件中,这种方式显然只能设置最常用通用的 用户信息,然后在需要部分仓库(如公司项目)需要特殊配置时,只能再通过下面的方式配置。git config --lo
有时候有些面试中经常会问到v-for与v-if谁的优先级高,这里就通过分析源码去解答一下这个问题。下面的内容是在 当我们谈及v-model,我们在讨论什么?的基础上分析的,所以阅读下面内容之前可先看这篇文章。继续从编译出发以下面的例子出发分析:new Vue({ el:'#app', template:` <ul> <li
前言平常业务需求:上传图片、Excel等,毕竟几M的大小可以很快就上传到服务器。针对于上传视频等大文件几百M或者几G的大小,就需要等待比较长的时间。这就产生了对应的解决方法,对于大文件上传时的暂停、断网、网络较差的情况下, 使用切片+断点续传就能够很好的应对上述的情况,方案分析切片就是对上传视频进行切分,具体操作为:File.slice(start,end):返回新的blob对象拷贝blob的起始
在vue项目开发中,经常需要做变量监听。ES5 使用的方法是Object.defineProperty,ES6使用的方法是Proxy。Object.defineProperty用法如下:Object.defineProperty(obj, prop, option)入参用法:obj:代理对象;prop:代理对象中的key;option:配置对象,get、set都在其中配置;例子:var obj =
XSS公鸡是指公鸡者利用网站中的漏洞,向页面中注入恶意脚本,从而获取用户的信息或者控制用户的计算机。 举一个通俗的例子,早期使用JSP页面渲染页面的项目,如果将用户名改成nick<alert>1</alert>,则当用户打开页面时,就会弹出一个警告框,而这个警告框可以被恶意脚本所替代,例如读取cookies或者其他敏感信息等操作。如何在项目中防范XSS公鸡呢有一些项目使用F
创建迁移在laravel中使用make:migration命令来创建迁移php artisan make:migration create_user_table执行上面的命令后这时候会在database/migrations 目录下生成对应的迁移文件,每个迁移的文件名都包含一个时间戳来让 Laravel 确认迁移的顺序。迁移结构一个迁移类包含两个方法: up 和 down。up 方法是用于新增数据
该脚本根据输入的路径,可以读取路径下的所有文件,实现匹配字符串替换,添加内容和删除内容的功能。import os from fileinput import FileInput #删除内容 def match_then_delete(inputpath): for root,dirs,files in os.walk(inputpath): for file in fil
前端循环中会用到forEach,其实forEach有很多问题:forEach无法终止或者跳出循环forEach()方法不支持使用break或continue语句来跳出循环或跳过某一项。如果需要跳出循环或跳过某一项,应该使用for循环或其他支持break或continue语句的方法。forEach 删除自身元素,index不可被重置在forEach中我们无法控制 index 的值,它只会无脑的自增直
将一维数组,转化成嵌套的treeconst arr = [ { id: 1, title: "child1", parentId: 0 }, { id: 2, title: "child2", parentId: 0 }, { id: 3, title: "child1_1", parentId: 1 }, { id: 4, title: "child1_2", p
项目使用前后的分离的开发模式,后端使用Spring Security实现基于Jwt的用户认证模式,数据交互使用Json格式。前端使用Nuxt框架实现服务端渲染(SSR)功能,使用Vuex实现登录状态存储,使用@nuxtjs/axios插件加载数据。用户登录后就会一直处于登录状态,除非用户主动登出或连续7天未访问网站才会要求重新登录。后端大体流程用户通过浏览器输入账号密码进行登录后台java程序认证
有的时候 SQL 语句被锁住了,可是通过 show processlist 找不到加锁的的 SQL 语句,这个时候应该怎么排查呢前提performance_schema = on;实验1、建一个表,插入三条数据mysql> use test1; Database changed mysql> create table action1(id int); Query OK, 0 rows
怎么能无感知刷新token,以下面的项目经历做总结:我是直接在main.js中设置了请求拦截器,作用是:每次请求时,带上token在拦截器中判断是否有返回token,有则将本地的token替换成返回的token后端设置响应码http code为401,返回此值时,此时用户的token过期/失效,删除本地存储的token,强制用户跳转到登录页new Vue({ router, store,
在实际项目中,我们往往会发放一个token凭证给前端,前端在每次请求的时候通过请求参数或者请求头将token传给后端进行验证。后端在获得token,验证通过之后会将token转成实际需要的参数,比如userId。在SrpingBoot项目中,由于在请求参数中并没有userId这个参数,所以我们无法通过方法形参获取到userId,因此我们需要通过HttpServletWrapper来将token转换
一、$router和$route的区别$router : 是路由操作对象,只写对象$route : 路由信息对象,只读对象/$router操作 路由跳转// 字符串 this.$router.push('home') // 对象 this.$router.push({ path: 'home' }) // 命名的路由 this.$router.push({ name: 'user
聊CSRF防御前,先聊聊CSRF是什么?CSRF是什么csrf 是一个可以发送http请求的脚本。可以伪装受害者向网站发送请求,达到修改网站数据的目的。原理当你在浏览器上登录某网站后,cookie会保存登录的信息,这样在继续访问的时候不用每次都登录了,这个大家都知道。而CSRF就利用这个登陆态去发送恶意请求给后端。为什么脚本可以获得目标网站的cookie呢?只要是请求目标网站,浏览器会自动带上该网
在日常工作中可能会存在误删数据的情况,今天就简单介绍下如何利用延迟库进行数据库的快速恢复。1.环境准备建立一个测试的主从库,写入一些测试数据,非本文要点,过程略。2.设置延迟同步在原有同步信息的基础上进行如下操作,设置延迟同步1小时。# 设置延迟1小时 mysql> stop slave; mysql> CHANGE REPLICATION SOURCE TO SOURCE_DELAY
1.中间键使用 koa-bodynpm install koa-body --saveconst koaBody = require('koa-body'); app.use(koaBody({ multipart: true, formidable: { maxFileSize: 200 * 1024 * 1024 // 设置上传文件大小最大限制,默认2M } }));2.
对于mysql索引优化,网上有很多解决办法,今天结合项目实践来聊一聊通过索引优化来提升查询sql性能。下面分四个部来介绍:1.多张表查询的索引分析假设我们现在有三张表:CREATE TABLE `t_student` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_bin DEFAULT NULL COM
在微信开发中,很多请求都是用curl实现的,并不是跳转的curl或者ajax。index.php<?php//api接口$url = "server.php";//发送请求function httpGet($url){ $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_se
创建vue.config.js文件// 方法1module.exports = { devServer: { host: 'localhost', port: '8083', proxy: { '/api': { // /api 表示拦截以/api开头的请求路径 target: 'http
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号