git还原操作git reset、git revert和git checkout区别

1、git checkout
使用场景:误删除仓库当中还存在的文件或者撤销未提交的修改
git checkout 1.php

2、git reset
使用常见:已commit或已commit并push
git reset [–hard|soft|mixed|merge|keep] [<commit>或HEAD]:将当前的分支重设(reset)到指定的<commit>或者HEAD(默认,如果不显示指定commit,默认是HEAD,即最新的一次提交),并且根据[mode]有可能更新index和working directory。mode的取值可以是hard、soft、mixed、merged、keep。下面来详细说明每种模式的意义和效果。
查看提交历史
git log
commit 3
commit 2
commit 1
执行
git reset –hard HEAD~1
或者git reset –hard HEAD^
再执行git log
commit 2
commit 1
git status没有任何内容
git reset –soft HEAD~1
git status会显示上次提交的文件
如果–hard回滚之后需强制推才可以!!

3、git revert
git rever HEAD^
git rever -n commitId
解决冲突,提交,push

配置phpmyadmin管理多个server

//修改librarise/config.default.php
$cfg['AllowArbitraryServer'] = true; //默认是false,改成true 
最后添加

$hosts = array(
'1'=>array('host'=>'127.0.0.1','user'=>'root','password'=>'123456'),
'2'=>array('host'=>'127.0.0.2','user'=>'root','password'=>'123456')
);
for($i=1;$i<=count($hosts);$i++){
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = $hosts[$i]['host'];
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Servers'][$i]['user'] = $hosts[$i]['user'];
$cfg['Servers'][$i]['password'] =$hosts[$i]['password'];

}

关闭Ubuntu提示欢迎语

Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic x86_64)

* Documentation: https://help.ubuntu.com/

System information as of Fri Sep 23 09:31:54 CST 2016

System load: 0.3 Processes: 254
Usage of /: 2.3% of 114.33GB Users logged in: 1
Memory usage: 4% IP address for eth0: 10.200.10.203
Swap usage: 0%

Graph this data and manage this system at:
https://landscape.canonical.com/

276 packages can be updated.
170 updates are security updates.

New release ‘16.04.1 LTS’ available.
Run ‘do-release-upgrade’ to upgrade to it.

编辑/etc/pam.d/sshd
session optional pam_motd.so motd=/run/motd.dynamic noupdate
session optional pam_motd.so # [1]
屏蔽这两行即可

上拉加载更多

 
  • 第一个
  • 第二个
$(function(){
    var counter = 2;//开始加载
    var num = 6;//每页数量
    //容器外层
    $('#content_drop').dropload({
        scrollArea : window,
        loadDownFn : function(me){
            $.ajax({
                type: 'GET',
                url: 'index.php?p='+ counter,
                dataType: 'json',
                success: function(data){
                	if(data.status  !=0){
                        // 锁定
                        me.lock();
                        // 无数据
                        me.noData();
                    } else {
                    	var result = '';
                        counter++;
                        for(var i = 0; i < num; i++){
                        	//处理内容
                        }
                        $('#content_list').append(result);
                        me.resetload();
                    }
                },
                error: function(xhr, type){
                    console.log('Ajax error!');
                    me.resetload();
                }
            });
        }
    });
});

参考:https://github.com/ximan/dropload

NodeJS操作Mysql示例

//config.js
module.exports={
	
	mysql:{
		host:'localhost',
		port:3306,
		user:'Joyous',
		password:'123456',
		database:'html5',
		charset:'utf8',
		connectionLimit:100,
	}
}
//mysql.js
var mysql=require('mysql');
var config = require('./config.js');
var DB  = mysql.createPool(config.mysql);
var DB_MYSQL = function(){
	__constructor();
	//数据查询接口
	this.fetchRow = function(tableName, idJson, callback) {
		DB.query('SELECT * FROM ' + tableName + ' where ? ', idJson, function(error, results){
			if(error) {
				console.log('ERROR :' + error.message);
				DB.end();
				callback(false);
			} else {
				if(results) {
					callback(results.pop());
				} else {
					callback(results);
				}
			}
		});
		
	};
	//数据插入接口
	this.insert = function(tableName, rowInfo, callback) {
		DB.query('INSERT INTO ' + tableName + ' SET ?', rowInfo, function(err, result){
			if(err) throw err;
			callback(result.insertId);
		});
		
	};
	//数据修改接口
	this.update = function(tableNmae, idJson, rowInfo, callback) {
		DB.query('UPDATE ' + tableName + ' SET ? where ?', [rowInfo, idJson], function(error, result){
			if(error) {
				console.log('UPDATE ERROR :' + error.message);
				callback(false);
			} else {
				callback(result)
			}
		});
	};
	//数据删除接口
	this.remove = function(tableName, idJson, callback){
		DB.query('DELETE ' + tableName + ' where ? ', idJson, function(err, results){
			if(err) {
				console.log('DELETE ERROR :' + err.message);
				DB.end();
				callback(false);
			} else {
				callback(true);
			}
		});
	};
	//自定义查询
	this.queryStr = function(sql,callback){
		DB.query(sql, function(error, result){
			if(error) {
				console.log('QUERY'+ error.message);
				DB.end();
				callback(false);
			} else {
				callback(result);
			}
		});
	};
	//条件查询
	this.fetchAll = function(tableName, whereJson, orderByjson, limitArr, selectStr, callback){
		var andWhere=whereJson['and'],orWhere=whereJson['or'],andArr=[],orArr=[];
		for(var i =  0;i0 ? andArr.join(' and ') : '',
			orStr = orArr.length > 0 ? orArr.join(' or ') : '',
			limitStr = limitArr.length > 0 ? ' limit '+limitArr.join(",") : "",
			orderStr = orderByjson['type'] ? ' order by ' + orderByjson['key'] + ' ' + orderByjson['type'] : '';
			var sql = 'SELECT ' + selectStr + ' FROM ' + tableName + ' where ' + andStr + orStr + orderStr + limitStr;
			DB.query(sql,function(err, results) {
				if(err) {
					console.log('FETCHALL ERROR :' + err.message);
					DB.end();
					callback(false);
				} else {
					callback(results);
				}
			});
	};
	//构造函数
	function __constructor(){

	}
};
module.exports = new DB_MYSQL();
//test.js
var DB=require('./lib/mysql.js');
DB.fetchRow('cj_sys',{id:1},function(res){
	console.log(res.id);
});

 

代理Node服务器

apache版本

        DocumentRoot /data/html/abc
        ServerName blog.phpfs.com

        ProxyPass http://127.0.01:3000/#注意Node监听的端口
        ProxyPassReverse http://127.0.0.1:3000/


nginx版本
server {  
    listen  80;  
    server_name blog.phpfs.com;  
    location / {  
        proxy_pass http://127.0.0.1:3000;  
    }  
} 

 

NodeJs当中module.exports和exports的区别

Module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是Module.exports而不是exports。

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是Module.exports本身不具备任何属性和方法。如果,Module.exports已经具备一些属性和方法,那么exports收集来的信息将被忽略。

如果你想你的模块是一个特定的类型就用Module.exports。如果你想的模块是一个典型的“实例化对象”就用exports。

var a = {name: ‘nswbmw 1’};
var b = a;
console.log(a);
console.log(b);
b.name = ‘nswbmw 2’;
console.log(a);
console.log(b);
var b = {name: ‘nswbmw 3’};
console.log(a);
console.log(b);

输出
{ name: ‘nswbmw 1’ }
{ name: ‘nswbmw 1’ }
{ name: ‘nswbmw 2’ }
{ name: ‘nswbmw 2’ }
{ name: ‘nswbmw 2’ }
{ name: ‘nswbmw 3’ }
a 是一个对象,b 是对 a 的引用,即 a 和 b 指向同一个对象,即 a 和 b 指向同一块内存地址,所以前两个输出一样。当对 b 作修改时,即 a 和 b 指向同一块内存地址的内容发生了改变,所以 a 也会体现出来,所以第三四个输出一样。当对 b 完全覆盖时,b 就指向了一块新的内存地址(并没有对原先的内存块作修改),a 还是指向原来的内存块,即 a 和 b 不再指向同一块内存,也就是说此时 a 和 b 已毫无关系,所以最后两个输出不一样。

1、exports 是指向的 module.exports 的引用
2、module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {}
3、require() 返回的是 module.exports 而不是 exports

//exports只是一个引用!!!
var exports = module.exports = function(param) {
console.log(param);
};

//exports 重新赋值
exports.print = function(param) {
console.log(param + “,we are printing.”);
};
//b.js
var a=require(“./a.js”);
a(‘test’);
a.print(‘test’);
如果还是不明白!!!!
强烈推荐阅读:http://cnodejs.org/topic/5231a630101e574521e45ef8

NodeJS操作Redis

新建test.js,然后在目录下执行npm install redis

var redis = require('redis');
var client = redis.createClient(6379,'127.0.0.1');
client.on('connect', function() {
    console.log('connected');
});
//string
client.set('framework', 'AngularJS');
client.get('framework',function(err,data){
    console.log(data);
});
//hash
client.hmset('frameworks', 'javascript', 'AngularJS', 'css', 'Bootstrap', 'node', 'Express');
client.hgetall('frameworks', function(err, object) {
    console.log(object);
});
//list
client.rpush(['framework-list', 'angularjs', 'backbone'], function(err, reply) {
    console.log(reply);//长度
});
client.lrange('framework-list', 0, -1, function(err, reply) {
    console.log(reply); //元素
});
//set
client.sadd(['tags', 'angularjs', 'backbonejs', 'emberjs'], function(err, reply) {
    console.log(reply); // 3
});
client.smembers('tags', function(err, reply) {
    console.log(reply);
});
//判断key是否存在
client.exists('key', function(err, reply) {
    if (reply === 1) {
        console.log('exists');
    } else {
        console.log('doesn\'t exist');
    }
});
//删除key
client.del('frameworks', function(err, reply) {
    console.log(reply);
});
//设定有效期
client.set('key1', 'val1');
client.expire('key1', 30);
//增加
client.set('key2', 10, function() {
    client.incr('key2', function(err, reply) {
        console.log(reply); // 11
    });
});

 
参考:https://www.npmjs.com/