使用纯 Javascript 创建有用的自动化功能

2025-06-08

使用纯 Javascript 创建有用的自动化功能

您更倾向于自动化还是手动?

大家好👋,
作为应用程序制造商,我继续为开发者社区做出贡献,今天我建议讨论如何使用 NodeJS 有效地自动执行任务。

那么……你每天要进行多少重复的手动操作?可能很多! 😐

为什么……?因为自动化零散的操作耗时又长,难度又大。没时间构建并自动化一个完整的流程?我也没时间!

事实上,这可能比你想象的要容易。如果编写自动化代码让你头疼,那说明你可能没有使用正确的工具。

一个简单的方法是:增量自动化
把你的流程写在笔记里,然后开始编写部分任务的代码。这样,你就可以在手动操作和自动操作之间切换了。

我不知道你是怎么想的,但我个人更喜欢通过测试和原型设计来学习。对我来说,最好的方法是使用Markdown 的 JavaScript 操场。所以我推荐你试试我的应用程序 Znote,用它来提升你的工作效率,或者你也可以使用你最喜欢的 IDE。

选择用例

现在,让我们通过一个具体的例子来了解如何构建一个即用型自动化系统。最好的方法就是开始解决你自己的问题!那么,让我来介绍一下我们的第一个用例。

当我有新注册用户时,我必须定期

  • 使用 SSH 连接到我的远程数据库,
  • 使用 SQL 查询手动提取用户,
  • 将结果复制到本地并与现有用户进行比较。
  • 一旦确定了新用户,
  • 我向每位新成员发送了一封欢迎电子邮件以获取他们的反馈。

SSH-邮件新用户图

对远程数据库进行 SQL 查询

1 - 进行 SQL 查询

async function getSQL(sqlQuery, host, port, user, password, database) {
 const { Sequelize } = require('sequelize');
 const sequelize = new Sequelize(user, password, database, {
    dialect: "mysql"/* one of 'mysql' | 'mariadb' | 'postgres' | 'mssql' */,
    host: host,
    port: port
 });

 sequelize.authenticate();
 const [results, metadata] = await sequelize.query(sqlQuery);

 sequelize.close()
 return results;
}
Enter fullscreen mode Exit fullscreen mode

2 - 使用 SSH 进行 SQL 查询

async function getRemoteSQL(sqlQuery) {
  const { spawn } = require('child_process');

  // connect to server (don't forget to copy your ssh-key on the remote server)
  const ssh = spawn('ssh', [
   '-L', '3307:localhost:3306',
   'user@XXX.ovh.net',
  ]);
  await sleep(4000); // wait connection
  // make SQL query (replace with your credentials)
  const data = await getSQL(sqlQuery, "localhost", 3307, "USER", "PASSWORD", "DATABASE");
  // quit
  ssh.kill();
  return data;
}
Enter fullscreen mode Exit fullscreen mode

您现在可以在我的笔记中的任何位置对远程数据库执行 SQL 查询

const users = await getRemoteSQL("select purchase_email from license;");
printJSON(users)
Enter fullscreen mode Exit fullscreen mode

识别新用户

然后,我们要识别自上次运行查询以来的所有新用户。

function getNewUsers(incomingData, filename, key) {
  const fs = require('fs');
  let refData = [];
  try {
    refData = JSON.parse(fs.readFileSync(filename, 'utf8'))
      .map(element => key(element));
  } catch (err){}

  const delta = [];
   incomingData.forEach(obj => {
    if (refData.indexOf(key(obj))===-1) {
      delta.push(obj);
    }
  });
  printJSON(delta);
  return delta;
}
Enter fullscreen mode Exit fullscreen mode

发送邮件

最后,我们可以向每个新用户发送一封邮件。使用 Google,您需要生成专用凭证:https://support.google.com/accounts/answer/185833

function sendMail(recipients) {
  const nodemailer = require('nodemailer');

  const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
      user: 'XX@gmail.com', // your gmail
      pass: 'XXX', // app credential here
   },
  });
  const result = await transporter.sendMail({
   from: '"Anthony" <XX@gmail.com>', // sender address
    to: recipients, // list of receivers (,)
    subject: "Just to know if everything is fine 😊", // Subject line
    text: "Hi 👋, Being very concerned about the quality of Znote app, I thank you for any feedback you could give me, allowing me to improve my software!",   // plain text body
    html: "Being very concerned about the <b>quality</b> of Znote app, I thank you for any feedback you could give me, allowing me to improve my software!",   // html body
  });
  printJSON(result);
}
Enter fullscreen mode Exit fullscreen mode

把所有东西都插上🔌

剩下的就是通过调用不同的函数来描述我们的流程。

// get all users in remote database
const allUsers = await getRemoteSQL("select purchase_email from license;");
// show new users since last execution time
const newUsers = getNewUsers(allUsers, '/Users/alagrede/Desktop/users.json', it => it.purchase_email);
// write all users in file
fs.writeFileSync('/Users/alagrede/Desktop/users.json', JSON.stringify(allUsers));
// send mail
sendMail(newUsers.map(e=>e.purchase_email));
Enter fullscreen mode Exit fullscreen mode

哒哒!!

Gmail 截图

总结

现在,您拥有了一系列可复用的函数和一个自动化流程。由于这些函数可以在其他笔记中复用,您可以利用现有工作成果,继续创建其他流程。然后,导出脚本,准备在 cron 中运行

👉 希望这个例子能给你一些启发!你觉得这篇文章有用吗?如果是这样,我还有很多其他例子可以与你分享。

更进一步

当你需要的时候我会继续添加一些示例。

同时,开始将你的日常任务变成简单且可重复的事情,你的工作会变得更有趣。🌈️

你可以在这里查看我的博客👉

如果您想尝试 Znote,请访问👉这里(我很乐意接受任何评论)

znote 截图

鏂囩珷鏉ユ簮锛�https://dev.to/alagrede/create-useful-automations-with-plain-javascript-1871
PREV
关于优先考虑副业项目 1. 它是否有助于我的职业和个人成长? 2. 它是否解决了具体问题? 3. 我对它有多热情? 成果资源
NEXT
Git 分支策略指南