【问题标题】:How to execute shell scripts on the backend of a nodejs web app?如何在 nodejs Web 应用程序的后端执行 shell 脚本?
【发布时间】:2021-09-23 23:17:53
【问题描述】:

我有一个在谷歌计算引擎上运行的全栈 MERN 应用程序,以及在同一台服务器上运行的本地 mongodb。它是一个 CRUD 应用程序,但是,我有一个存储在服务器中的脚本,我希望每次用户按下前端的按钮时都会触发该脚本。 (一个用例是,用户输入一些登录到数据库的输入,当它登录时,我希望在后端触发一个脚本,从 mongodb 表中创建一个 json 文件并将其上传到 github/通过电子邮件发送出去)。

我不知道从哪里开始学习这个,一些谷歌搜索让我找到了 AJAX 和 child_processes,我的方向是否正确?任何资源或指针都会很棒。谢谢

【问题讨论】:

  • 不确定您是否正在寻找“shell 脚本”。更像是使用 Node 的文件系统库在文件夹上创建/编辑文件。
  • 如果可能的话,我想更具体地说,我希望用户输入/按钮按下以在服务器后端执行命令行参数?
  • 是的,当然,使用 Axios 之类的东西来访问将运行“控制器”功能的端点,该功能将完成您​​需要做的事情。非常基本的 MVC 东西在这里看起来像
  • 你能检查我的理解吗?你的意思是我应该在我的后端创建一个新的端点,在那里我输入我想使用的任何端点参数......然后说如果命令行参数需要来自用户输入的参数,那么我可以使用 axios 发布请求并使用用户输入执行命令行参数

标签: node.js reactjs mongodb backend mern


【解决方案1】:

如果我正确理解了这个问题,那么您想要完成以下事情:

1. Export json data from a local MongoD instance.
2. Then send that data to github or email it somewhere.

在这种情况下,我建议使用child process(exec, spawn, execFile, fork) 执行mongoexport 命令来获取.json 文件。

但我不建议使用 shell 脚本将数据上传到 github 或通过电子邮件发送。

github api 用于github,并使用node-mailer 通过电子邮件发送数据。

要了解有关child processes 的更多信息,请阅读此处的文档Node.js v14.x Child process docs

【讨论】:

  • 所以澄清一下,当用户按下按钮时,我可以添加一个调用 mongoexport 和 git CLI 的子进程来完成我需要完成的工作?
  • 好吧,我想如果我这样做的话,我会创建一个端点或路由api/getdata 或任何带有身份验证的东西。然后,当您单击前端中的按钮时,您的应用程序将向该端点发送请求。假设端点由名为getData.js 的文件处理。所以getData.js 将创建一个子进程来执行mongoexport 命令来获取所有文件并使用github api 上传它而不是git cli(就像你如何使用 fetch 发送数据一样)。在此处了解 github api:Github Rest Api
  • 顺便说一下,在 nodejs 中我们没有原生的fetch api。我们改用http 模块。但是如果你想在 nodejs 中使用 fetch api,有一个名为 node-fetch 的库。
  • 谢谢,如果我只想运行一些命令行参数,我发送哪种类型的 http 请求有关系吗?例如,每次用户按下某个按钮时,我只是让服务器运行 mongoexport,它是由 get 或 post 请求触发的吗?如果我希望将用户输入合并到命令行参数中,我假设我需要使用发布请求
  • 如果您的请求必须携带一些数据,那么肯定是发布请求。顺便说一句,从用户那里获取cli arguments 时要小心。从非管理员用户那里获取命令行参数将是一个主要漏洞。例如,假设您正在运行git log 命令并且用户传递--oneline && echo you_r_in_danger,猜猜第二个cmd 也会被执行。这样我就可以轻松破解你的整个服务器。因此,请注意并进行验证。最后,如果我的答案解决了您的问题,那么将答案标记为已接受,并且非常感谢您投赞成票
猜你喜欢
  • 2012-07-05
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
相关资源
最近更新 更多