【发布时间】:2021-05-04 23:26:02
【问题描述】:
我正在尝试运行以下 NodeJS 脚本来创建与 MySQL 数据库的连接并执行一些任务:
var mysql = require('mysql');
var con = mysql.createConnection({
host: "url",
user: "xxx",
password: "yyy",
database: "zzz"
});
con.connect(function(err) {
if (err) console.log(err);
else console.log("Success");
});
当这个脚本从 Ubuntu 终端运行时,它按预期工作,但是当我尝试使用 PHP 中的 exec 函数以下列方式执行相同操作时:
$execString = "/usr/bin/node /home/user/sampleProject/example.js";
exec($execString, $output);
程序挂起,没有返回预期的“成功”消息。
我启用并检查了 MySQL 日志并验证了在使用 exec 函数调用脚本时数据库确实收到了连接请求,但由于某种原因它永远不会完成并继续执行直到超时。
任何关于为什么会发生这种情况的想法或帮助将不胜感激。
【问题讨论】:
-
你为什么还要这样做?如果您需要,PHP 可以直接连接到您的数据库
-
您是在尝试直接对这些对象进行字符串操作,还是将 JSON 解码为对象/数组,然后以这种方式进行操作?后者通常是更有效的方法。节点在这方面明显更快吗?这些和mysql有什么关系?数据是否保存在数据库中?无论如何,我怀疑如果上面的代码本身导致错误,那么连接代码是异步的并导致回调的事实可能是 exec 方法的问题。
-
好吧,你肯定需要通过 PHP 来触发它吗?有什么理由不能直接调用节点脚本?它是如何被触发的——它是更大的 PHP 脚本的一部分,还是只是从浏览器调用的一个小脚本,还是什么?
-
节点可以像 PHP 一样直接充当 API 端点
-
你是一个聪明人,你是对的,我可以使用相同的脚本代码作为 Node 中的 API 端点,并从另一个 API 调用一个 API,谢谢,遗憾的是我只能投票你的cmets,而不是给你更多的声望点