nodejs开发笔记

本文分享了Node.js的使用技巧与常见问题解决方法。使用技巧包括文件变更后自动重启服务,可借助nodemon、pm2、forever - monitor;还能通过pm2、forever保持服务7*24运行。常见问题涉及Windows乱码、Mac找不到Node等,文中给出对应解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本文是笔者在使用nodejs时的笔记,以供读者参考。

1. 使用技巧

1.1 在文件发生变更后自动重启服务

  • nodemon

    // 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

    // pm2.config.js
    // command: pm2 start pm2.config.js

    module.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',
        },
      ],
    }
    
  • forever-monitor

    具体请参见官方文档。

1.2 保持服务"7*24"运行

  • pm2

    配置方法请参见“1.1”部分的内容。

  • forever

    该项目目前完全依赖社区来实施修复和新功能。推荐使用pm2

2. 常见问题

2.1 node exec windows 乱码问题

  • 使用iconv-liteGBK字符集解码。
  • 针对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

  1. 先查看本地 node 安装路径
  2. 执行: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.`)
})

详情请参考这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿祥_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值