2016-09-15 143 views
2

在我的应用程序中,我想执行一个Node.JS文件从PHP,这反过来又使http request到另一个PHP文件。在PHP中使用exec执行nodejs脚本文件()

总之,这是我正在做的过程。

PHP文件--->电话 - >文件的NodeJS --->处理数据 - >并且使HTTP请求 - > PHP文件

当运行通过终端nodejs文件,它成功地使http请求到另一个PHP文件,我得到我想要的。

但是,当我尝试通过PHP运行nodejs文件时,nodejs文件无法找到某些模块。

我在PHP代码:

$nodeJsPath = '/var/www/html/projectfolder/js/nodefunc.js'; 

$ret = exec("node ".$nodeJsPath.' 2>&1', $out, $err); 

这是我得到的错误:

Array 
(
    [0] => module.js:457 
    [1] =>  throw err; 
    [2] => ^
    [3] => 
    [4] => Error: Cannot find module 'some_module' 
    [5] =>  at Function.Module._resolveFilename (module.js:455:15) 
    [6] =>  at Function.Module._load (module.js:403:25) 
    [7] =>  at Module.require (module.js:483:17) 
    [8] =>  at require (internal/module.js:20:19) 
    [9] =>  at Object.<anonymous> (/var/www/html/projectfolder/js/nodefunc.js:5:9) 
    [10] =>  at Module._compile (module.js:556:32) 
    [11] =>  at Object.Module._extensions..js (module.js:565:10) 
    [12] =>  at Module.load (module.js:473:32) 
    [13] =>  at tryModuleLoad (module.js:432:12) 
    [14] =>  at Function.Module._load (module.js:424:3) 
) 
+0

我可以知道为什么downvote和什么是错这个问题? – Abhinav

+0

当从CLI运行命令时它工作吗? – krampstudio

+0

是的,它从终端执行时运行正常 – Abhinav

回答

1

我终于明白了。它只是ignorng原因不明:(

Nodejs文件的NODE_PATH可变我哈得给这样的模块的绝对路径:

var request = require("/usr/lib/node_modules/request"); 
2
  1. 检查是否安装了模块(npm install
  2. 运行在exec节点应用程序当前工作目录:
exec("cd ". dirname($nodeJsPath). " && node nodefunc.js 2>&1", $out, $err); 
+0

hi..it听起来有点天真,但我不熟悉nodejs,我应该在哪里准确执行'npm install '因为我可以在这个路径中看到已安装的模块文件夹'/ usr/lib/node_modules' – Abhinav

+0

我仍然得到相同的错误r即使在更改了“exec”命令 – Abhinav

+0

中的目录之后,您需要将npm install运行到包含您的节点项目的文件夹中(该项目与您的程序包一起使用。json文件) – krampstudio

1

你有更改目录后,执行节点的命令,你才达到一个命令两件事情

1.更改目录cd /var/www/html/projectfolder/js

2.然后执行node nodefunc.js 2>&1

使用& &或;用于在一行中执行多个命令如下所述

$ret = exec("cd /var/www/html/projectfolder/js; node nodefunc.js 2>&1', $out, $err);