n个你不知的nodejs 细节知识

1,620 阅读1分钟

node脚本传参解决方案

commander.js,例:node app.js -p opt1 -f file1

#!/usr/bin/env node
 
/**
 * Module dependencies.
 */
 
var program = require('commander');
 
program
  .version('0.0.1')
  .option('-p, --peppers', 'Add peppers')
  .option('-P, --pineapple', 'Add pineapple')
  .option('-b, --bbq', 'Add bbq sauce')
  .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
  .parse(process.argv);
 
console.log('you ordered a pizza with:');
if (program.peppers) console.log('  - peppers');
if (program.pineapple) console.log('  - pineapple');
if (program.bbq) console.log('  - bbq');
console.log('  - %s cheese', program.cheese);

 

nodejs path处理

  1. __dirname:返回的是这个文件所在文件夹的位置
  2. __filename:你运行命令代表的是文件所在的位置,不管你运行什么命令,都是指向文件
  3. process.cwd():你运行node命令所在文件夹的位置,比如你在src目录下运行,那么就是输出到src为止,下面的同理。

 

nodejs createReadStream;buffer的使用

let stream = fs.createReadStream(filePath)
let fileContent;
stream.on('data', (chunk) => {
  fileContent += chunk
});
stream.on('end', () => {
  console.log(Buffer.from(fileContent).toString())
});
结果:
{
  "front_res": [{
    "source": "../dataAnalysis1/handledtimeData-5.js",
    "target": "/var/www/html/s/sns/miaokai/"
  }]
}

nodejs 编码问题

The value "gbk" is invalid for option "encoding"

  • 原理:由于Node.js仅支持如下编码:utf8, ucs2, ascii, binary, base64, hex,并不支持中文GBK或GB2312之类的编码
  • 解决方案:使用iconv-lite
const fs = require('fs');
const iconv = require('iconv-lite');

const str = '该字符串预计要转化为gbk编码的字符串';
const encoded = iconv.encode(str, 'gbk');

fs.writeFile('gbk.txt', encoded, function () {
  const buf = fs.readFileSync('gbk.txt');
  console.log(buf.length);
});