文章目录
前言
本文是笔者在使用nodejs
时的笔记,以供读者参考。
1. 使用技巧
1.1 在文件发生变更后自动重启服务
-
// nodemon.json
// command: nodemon --delay 5 src/demo.js{ "verbose": true, "ignore": ["*.test.js"], "watch": ["src/"], "execMap": { "js": "node --harmony" }, "env": { "NODE_ENV": "development" }, "ext": "js json" }
-
// pm2.config.js
// command: pm2 start pm2.config.jsmodule.exports = { apps: [ { name: 'demo', script: 'src/demo.js', watch: ['src'], watch_delay: 5000, args: '', instances: 1, cron_restart: '0 0 * * *', ignore_watch: ['node_modules'], // 内存使用超过上限自动重启 max_memory_restart: '500M', restart_delay: 3000, autorestart: true, // 有时可能希望应用程序在出现故障时自动重新启动(即非零退出代码),而不希望进程管理器在正确关闭时重新启动它(即退出代码等于 0) stop_exit_codes: [0], // out_file: '/dev/null', // error_file: '/dev/null', }, ], }
-
具体请参见官方文档。
1.2 保持服务"7*24"运行
2. 常见问题
2.1 node exec windows 乱码问题
- 使用
iconv-lite
以GBK
字符集解码。 - 针对windows10及以后的版本:控制面板 - 区域 - 管理 - 更改系统区域设置 - 使用 Unicode UTF-8 提供全球语言支持
const iconv = require('iconv-lite')
try {
execSync(`mkdir -p ./1/12`)
} catch (e) {
const msg = iconv.decode(e.stderr, 'gbk').replace(/[\r\n]/g, '')
console.error(`error: ${msg}`)
}
2.2 mac env: node: No such file or directory
- 先查看本地 node 安装路径
- 执行:
ln -s node本地路径 /usr/bin/node
,如:ln -s /usr/local/bin/node /usr/bin/node
2.3 取消模块缓存
在模块中增加delete require.cache[module.filename]
。
2.4 关闭子进程
特别注意:
使用spawn
启动一个子进程之后,可调用:childProcess.kill('SIGTERM')
、process.kill(childProcess.pid)
来关闭子进程,具体可点击这里。
2.5 关于永不改变状态的Promise
示例代码:
async function run () {
try {
await noResolvedPromise()
} catch (e) {
console.error(e.message)
} finally {
console.log(new Date().toString())
setTimeout(() => {
run()
}, 1000)
}
}
function noResolvedPromise () {
return new Promise((resolve, reject) => {
let i = 0
while (i < 100) {
i++
}
})
}
run()
process.on('exit', code => {
console.log(`code: ${code}, exited.`)
})
详情请参考这里。