Skip to content

Instantly share code, notes, and snippets.

@joecliff
joecliff / possibleReturnValuesOfPromiseFuntion.js
Last active August 29, 2015 13:58
使用promise(q.js)时函数可能的返回值
var Q = require('q');
function createPromise(data) {
var deffered = Q.defer();
setImmediate(deffered.resolve.bind(deffered, data));
return deffered.promise;
};
/**
* 第一步返回必须是promise,否则没有then...
@joecliff
joecliff / methodScopeInQ.js
Last active August 29, 2015 13:58
使用q.js调用不支持promise的方法时的作用域问题
//最好总是使用带this绑定的q方法(相对保险)
Q.ninvoke(object, methodName, ...args); //直接执行
Q.nbind(nodeMethod, thisArg, ...args); //返回绑定参数后的方法
//不带直接绑定this作用域的,如果方法内用到了this,可能需要手动绑定
Q.nfcall(obj.method.bind(obj), ...args)
Q.nfapply(obj.method.bind(obj), args)
//其他类似 ...
@joecliff
joecliff / cryptojs_aes.js
Last active August 29, 2015 13:59
crypto-js aes encrypt descrypt
var CryptoJS = require("crypto-js");//replace this with script tag in browser env
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase").toString();
console.log(encrypted);
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase").toString(CryptoJS.enc.Utf8);
console.log(decrypted);
@joecliff
joecliff / cryptojs_base64_encrypt_decrypt.js
Last active October 10, 2024 19:44
An example of base64 usage in cryptojs
var CryptoJS = require("crypto-js");//replace thie with script tag in browser env
//encrypt
var rawStr = "hello world!";
var wordArray = CryptoJS.enc.Utf8.parse(rawStr);
var base64 = CryptoJS.enc.Base64.stringify(wordArray);
console.log('encrypted:', base64);
//decrypt
var parsedWordArray = CryptoJS.enc.Base64.parse(base64);
@joecliff
joecliff / cryptojs_wordarray.js
Last active March 16, 2023 20:32
cryptojs WordArray usage
/**
* cryptojs use WordArray (CryptoJS.lib.WordArray) as parameter/result frequently.
* A WordArray object represents an array of 32-bit words. When you pass a string,
* it's automatically converted to a WordArray encoded as UTF-8.
*/
var CryptoJS = require("crypto-js");
// convert String to WordArray
var wordArray = CryptoJS.enc.Utf8.parse('Hello, World!');
@joecliff
joecliff / express_download_name_proxy.js
Last active July 19, 2022 17:38
make a proxy to convert http download file name in express
var request = require('request');
function setDownloadName(req, res, fileName) {
var userAgent = (req.headers['user-agent'] || '').toLowerCase();
if (userAgent.indexOf('chrome') > -1) {
res.setHeader('Content-Disposition', 'attachment; filename=' + encodeURIComponent(fileName));
} else if (userAgent.indexOf('firefox') >-1) {
res.setHeader('Content-Disposition', 'attachment; filename*="utf8\'\'' + encodeURIComponent(fileName) + '"');
} else {
res.setHeader('Content-Disposition', 'attachment; filename=' + new Buffer(fileName).toString('binary'));
@joecliff
joecliff / preferable_error_hander_location.js
Last active August 29, 2015 14:00
preferable error handler location for promise style codes in nodejs
/**
* always put errorHandler in the last 'then' with a 'null' logic handler,
* so that all errors will be caught
*/
someModule.promiseFunc()
.then(function (data) {
//TODO other logic
})
.then(null, errorHandler);
@joecliff
joecliff / recover_from_error.js
Last active August 29, 2015 14:00
recover from error in q.js
'use strict';
var Q = require('q');
function prepare(data) {
// return Q(data);
return Q.reject(new Error('special error1'));
}
function judgeError(err) {
console.log('catch: ', err);
@joecliff
joecliff / convert_decimal_to_hexdecimal.js
Last active August 29, 2015 14:01
convert decimal to hexdecimal in js (js进制转换)
var num=12;
//12 -> c
var hex=12.toString(16);//same for other conditions
@joecliff
joecliff / hilight_keywords.js
Last active August 29, 2015 14:02
js highlight words function, support chinese
'use strict';
function convertKeywordsToRegStr(keywords) {
return '(' + keywords.trim().replace(/[^\w\u4E00-\u9FA5]+/g, '|') + ')';
}
function getHighlightFn(keywords, highlightClass) {
var regexpStr = convertKeywordsToRegStr(keywords);
if (regexpStr.length === 2) {
return function (sourceText) {