从另一个文件调用函数并为每次调用获得随机结果
call a function from another file and get a random result for each call
我有一个 random.js 文件包含这个来获取随机假 ip
exports.ip = function () {
let random = (Math.floor(Math.random() * 255) + 1)+"."+(Math.floor(Math.random() * 255) + 0)+"."+(Math.floor(Math.random() * 255) + 0)+"."+(Math.floor(Math.random() * 255) + 0);
return random
}
我调用 send.js 文件中的变量来替换字符串 {randomip}
let replace_tag = function (to) {
config.message.subject = config.message.subject
.replace("{randomip}", random.ip)
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromname = config.message.fromname
.replace("{randomip}", random.ip)
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromemail = config.message.fromemail
.replace("{randomip}", random.ip)
.replace("{email}", to)
.replace("{date}", random.date);
}
但它只会产生一个生成的ip,我想让它随机生成每次调用都会产生不同的值
我试过将它插入到循环中,但仍然无法正常工作
我在另一个函数中调用替换函数,然后像那样将其输入循环
let kirim = function (to) {
replace_tag(to);
let message = {
from: config.message.fromname+'<'+config.message.fromemail+'>',
to: to,
subject: config.message.subject,
text: config.message.text,
html: html
};
transporter.sendMail(message, (error, info) => {
if (error) {
return console.log(error.response)
}
console.log('Message sent: ',info.accepted);
});
};
(async () => {
for (var i in list) {
kirim(list[i]);
await delay(config.send.delay*1000);
}
})();
我认为它会起作用。
random.js:
exports.ip = function() {
return (Math.floor(Math.random() * 255) + 1)+"."+(Math.floor(Math.random() * 255) +
0)+"."+(Math.floor(Math.random() * 255) + 0)+"."+(Math.floor(Math.random() * 255) + 0);
}
send.js:
let replace_tag = function (to) {
config.message.subject = config.message.subject
.replace("{randomip}", random.ip())
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromname = config.message.fromname
.replace("{randomip}", random.ip())
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromemail = config.message.fromemail
.replace("{randomip}", random.ip())
.replace("{email}", to)
.replace("{date}", random.date);
}
function getRandomIp() {
return (Math.floor(Math.random() * 255) + 1)+"."+(Math.floor(Math.random() * 255) +
0)+"."+(Math.floor(Math.random() * 255) + 0)+"."+(Math.floor(Math.random() * 255) + 0);
}
let replace_tag = function (to) {
config.message.subject = config.message.subject
.replace("{randomip}", getRandomIp())
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromname = config.message.fromname
.replace("{randomip}", getRandomIp())
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromemail = config.message.fromemail
.replace("{randomip}", getRandomIp())
.replace("{email}", to)
.replace("{date}", random.date);
}
I call the replace function in another function then enter it into loop
啊,这是你的问题。您的 replace_tag
函数将更改 config
对象,并且在第一次调用后它不再包含模板标记,而是包含替换结果。对 replace_tag
的进一步调用将不再在您的配置中找到 {randomip}
,因此不会生成新的 ips。
您应该改为保持配置不变(不可变),并在每次需要时创建新的消息对象。这些对象中的每一个都将具有不同的随机 IP 地址。
// takes a string, returns a new string
function replace_tags(input, email) {
return input
.replace("{randomip}", random.ip)
.replace("{email}", email)
.replace("{date}", random.date);
}
// returns a new object, leaves config.message unaltered
function get_customised_message_template(to) {
return {
subject: replace_tags(config.message.subject, to),
fromname: replace_tags(config.message.fromname, to),
fromemail: replace_tags(config.message.fromemail, to),
};
}
function kirim(to) {
const random_message = get_customised_message_template(to);
// ^^^^^^^^^^^^^^^^^^^^^^
const message = {
from: random_message.fromname+'<'+random_message.fromemail+'>',
to: to,
subject: random_message.subject,
text: config.message.text,
html: html
};
transporter.sendMail(message, (error, info) => {
if (error) console.log(error.response);
else console.log('Message sent: ', info.accepted);
});
};
我有一个 random.js 文件包含这个来获取随机假 ip
exports.ip = function () {
let random = (Math.floor(Math.random() * 255) + 1)+"."+(Math.floor(Math.random() * 255) + 0)+"."+(Math.floor(Math.random() * 255) + 0)+"."+(Math.floor(Math.random() * 255) + 0);
return random
}
我调用 send.js 文件中的变量来替换字符串 {randomip}
let replace_tag = function (to) {
config.message.subject = config.message.subject
.replace("{randomip}", random.ip)
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromname = config.message.fromname
.replace("{randomip}", random.ip)
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromemail = config.message.fromemail
.replace("{randomip}", random.ip)
.replace("{email}", to)
.replace("{date}", random.date);
}
但它只会产生一个生成的ip,我想让它随机生成每次调用都会产生不同的值
我试过将它插入到循环中,但仍然无法正常工作
我在另一个函数中调用替换函数,然后像那样将其输入循环
let kirim = function (to) {
replace_tag(to);
let message = {
from: config.message.fromname+'<'+config.message.fromemail+'>',
to: to,
subject: config.message.subject,
text: config.message.text,
html: html
};
transporter.sendMail(message, (error, info) => {
if (error) {
return console.log(error.response)
}
console.log('Message sent: ',info.accepted);
});
};
(async () => {
for (var i in list) {
kirim(list[i]);
await delay(config.send.delay*1000);
}
})();
我认为它会起作用。
random.js:
exports.ip = function() {
return (Math.floor(Math.random() * 255) + 1)+"."+(Math.floor(Math.random() * 255) +
0)+"."+(Math.floor(Math.random() * 255) + 0)+"."+(Math.floor(Math.random() * 255) + 0);
}
send.js:
let replace_tag = function (to) {
config.message.subject = config.message.subject
.replace("{randomip}", random.ip())
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromname = config.message.fromname
.replace("{randomip}", random.ip())
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromemail = config.message.fromemail
.replace("{randomip}", random.ip())
.replace("{email}", to)
.replace("{date}", random.date);
}
function getRandomIp() {
return (Math.floor(Math.random() * 255) + 1)+"."+(Math.floor(Math.random() * 255) +
0)+"."+(Math.floor(Math.random() * 255) + 0)+"."+(Math.floor(Math.random() * 255) + 0);
}
let replace_tag = function (to) {
config.message.subject = config.message.subject
.replace("{randomip}", getRandomIp())
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromname = config.message.fromname
.replace("{randomip}", getRandomIp())
.replace("{email}", to)
.replace("{date}", random.date);
config.message.fromemail = config.message.fromemail
.replace("{randomip}", getRandomIp())
.replace("{email}", to)
.replace("{date}", random.date);
}
I call the replace function in another function then enter it into loop
啊,这是你的问题。您的 replace_tag
函数将更改 config
对象,并且在第一次调用后它不再包含模板标记,而是包含替换结果。对 replace_tag
的进一步调用将不再在您的配置中找到 {randomip}
,因此不会生成新的 ips。
您应该改为保持配置不变(不可变),并在每次需要时创建新的消息对象。这些对象中的每一个都将具有不同的随机 IP 地址。
// takes a string, returns a new string
function replace_tags(input, email) {
return input
.replace("{randomip}", random.ip)
.replace("{email}", email)
.replace("{date}", random.date);
}
// returns a new object, leaves config.message unaltered
function get_customised_message_template(to) {
return {
subject: replace_tags(config.message.subject, to),
fromname: replace_tags(config.message.fromname, to),
fromemail: replace_tags(config.message.fromemail, to),
};
}
function kirim(to) {
const random_message = get_customised_message_template(to);
// ^^^^^^^^^^^^^^^^^^^^^^
const message = {
from: random_message.fromname+'<'+random_message.fromemail+'>',
to: to,
subject: random_message.subject,
text: config.message.text,
html: html
};
transporter.sendMail(message, (error, info) => {
if (error) console.log(error.response);
else console.log('Message sent: ', info.accepted);
});
};