You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Nodemailer触发独立.js脚本生成新随机数?

问题解决:每次发送邮件生成新随机数

你的问题出在Node.js的模块缓存机制上:服务器启动时你就require('./randomnum.js')并把生成好的随机数赋值给number变量,这个值只会在启动时生成一次,后续所有请求都会复用同一个随机数,不会重新生成。

下面是两种可行的解决方法:

方法一:修改randomnum.js导出函数(推荐)

这种方式最符合Node.js模块设计的最佳实践,直接导出生成随机数的函数,每次需要时调用函数获取新值。

修改randomnum.js:

function randomnumber() {
  return Math.floor(100000 + Math.random() * 900000);
}

// 导出函数而非生成好的数值
exports.randomnumber = randomnumber;

然后修改myserver.js:

  1. 移除提前赋值的number变量,只保留模块引用:
var randomnum = require('./randomnum.js');
// 删掉这行:var number = randomnum.number;
  1. 在/mail的POST请求回调里,每次调用函数生成新随机数:
app.post('/mail', (req, res)=>{
  console.log(req.body)
  // 每次请求时生成新的随机数
  let number = randomnum.randomnumber();

  // 后续的nodemailer代码保持不变,继续使用这个number变量
  let transporter = nodemailer.createTransport({...});
  // ... 其余代码
})

方法二:清除模块缓存后重新加载(不推荐)

如果不想修改randomnum.js,可以在每次请求时清除该模块的缓存,再重新require,强制重新执行模块代码生成新随机数。但这种方式会破坏Node.js的模块缓存优化,性能和维护性都不如方法一。

修改myserver.js的POST请求回调:

app.post('/mail', (req, res)=>{
  console.log(req.body)
  // 清除randomnum.js的模块缓存
  delete require.cache[require.resolve('./randomnum.js')];
  // 重新加载模块,此时会重新执行randomnum.js里的代码生成新随机数
  let randomnum = require('./randomnum.js');
  let number = randomnum.number;

  // 后续nodemailer代码保持不变
  let transporter = nodemailer.createTransport({...});
  // ... 其余代码
})

推荐优先使用方法一,代码结构更清晰,也更符合Node.js的运行机制。

内容的提问来源于stack exchange,提问作者Naizey_lines

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 18:58:05