Last active
January 14, 2019 05:08
-
-
Save thephucit/2e4127b3fd984552c837111f01d597e3 to your computer and use it in GitHub Desktop.
some helper function in nodejs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * Get random item in array | |
| * | |
| * @param {Object} array | |
| * @param {Number} n | |
| * | |
| * @return {Object} | |
| */ | |
| random(array: any, n: number) { | |
| let result = new Array(n), | |
| len = array.length, | |
| taken = new Array(len); | |
| if (n > len) | |
| return array; | |
| while (n--) { | |
| let x = Math.floor(Math.random() * len); | |
| result[n] = array[x in taken ? taken[x] : x]; | |
| taken[x] = --len in taken ? taken[len] : len; | |
| } | |
| return result; | |
| } | |
| /** | |
| * access object property with variable | |
| * | |
| * @param {Any} obj | |
| * @param {String} prop | |
| * | |
| * @return Any | |
| */ | |
| readProp(obj: any, prop: string) { | |
| return obj[prop]; | |
| } | |
| /** | |
| * Get id from slug | |
| * | |
| * @param {string} slug | |
| * | |
| * @return {number} | |
| */ | |
| getId(slug: string) { | |
| let arr: any = slug.split('-'); | |
| let id: any = arr.pop(); | |
| id = parseInt(id); | |
| return !lo.isNaN(id) ? id : 0; | |
| } | |
| /** | |
| * Round number | |
| * | |
| * @param {number} number | |
| * @param {number} decimals | |
| * @return {number} | |
| */ | |
| round(number: number, decimals = 2) { | |
| return Number((number).toFixed(decimals)); | |
| } | |
| /** | |
| * Convert string to slug | |
| * | |
| * @param {String} slug | |
| * | |
| * @return {String} | |
| */ | |
| convertToSlug(slug: string) { | |
| //Change to lower case | |
| slug = slug.toLowerCase(); | |
| //Remove vietnamese | |
| slug = slug.replace(/á|à|ả|ạ|ã|ă|ắ|ằ|ẳ|ẵ|ặ|â|ấ|ầ|ẩ|ẫ|ậ/gi, 'a'); | |
| slug = slug.replace(/é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ/gi, 'e'); | |
| slug = slug.replace(/i|í|ì|ỉ|ĩ|ị/gi, 'i'); | |
| slug = slug.replace(/ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ/gi, 'o'); | |
| slug = slug.replace(/ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự/gi, 'u'); | |
| slug = slug.replace(/ý|ỳ|ỷ|ỹ|ỵ/gi, 'y'); | |
| slug = slug.replace(/đ/gi, 'd'); | |
| //Remove special char | |
| slug = slug.replace(/\`|\~|\!|\@|\#|\||\$|\%|\^|\&|\*|\(|\)|\+|\=|\,|\.|\/|\?|\>|\<|\'|\"|\:|\;|_/gi, ''); | |
| //Change space to '-' | |
| slug = slug.replace(/ /gi, "-"); | |
| //Remove -- | |
| slug = slug.replace(/\-\-\-\-\-/gi, '-'); | |
| slug = slug.replace(/\-\-\-\-/gi, '-'); | |
| slug = slug.replace(/\-\-\-/gi, '-'); | |
| slug = slug.replace(/\-\-/gi, '-'); | |
| slug = '@' + slug + '@'; | |
| slug = slug.replace(/\@\-|\-\@|\@/gi, ''); | |
| return slug; | |
| } | |
| /** | |
| * convert file to base64 | |
| * | |
| * @param {string} file | |
| * @param {buffer} | |
| */ | |
| async base64Encode(file: string) { | |
| let fs = require('fs'); | |
| let bitmap = fs.readFileSync(file); | |
| return await new Buffer(bitmap).toString('base64'); | |
| } | |
| /** | |
| * download file | |
| * | |
| * @param {string} url | |
| */ | |
| async downloadImage(url: string) { | |
| const Fs = require('fs'); | |
| const Path = require('path'); | |
| const Axios = require('axios'); | |
| const path = Path.resolve(__dirname, '../../../assets/images/downloads/', Path.basename(url)) | |
| const writer = Fs.createWriteStream(path) | |
| const response = await Axios({ | |
| url, | |
| method: 'GET', | |
| responseType: 'stream' | |
| }) | |
| await response.data.pipe(writer) | |
| return await new Promise((resolve, reject) => { | |
| writer.on('finish', resolve) | |
| writer.on('error', reject) | |
| }) | |
| } | |
| /** | |
| * convert file to base64 from url | |
| * | |
| * @param {string} url | |
| * @param {buffer} | |
| */ | |
| async urlBase64Encode(url: string) { | |
| try { | |
| let axios = require('axios'); | |
| let image = await axios.get(url, {responseType: 'arraybuffer'}); | |
| return Buffer.from(image.data).toString('base64'); | |
| } catch (ex) { | |
| return false; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment