NodeJS Github Cli命令不适用于express js

11dmarpk  于 2023-01-01  发布在  Node.js
关注(0)|答案(2)|浏览(142)

在我的后端Express服务器中,我尝试使用execSync执行github cli命令,但它挂起了。'

execSsnc("gh auth login --web")

'
在同一台机器上,当我使用terminal执行相同的命令时,它工作得很好。事实上,我尝试过在一个简单的nodejs项目中执行这行代码,它也工作得很好。但是每当我在我的express服务器中使用它时,它就挂在那里。我尝试过使用spawn,exec,spawnSync也是,但是到目前为止没有运气。另外,当我使用execSync("gh auth status")时,这会给出错误,说当前没有github主机。但是在机器中,当我从终端运行此命令时,它说我已经使用个人访问令牌登录了它。2因此我发现从Express服务器运行登录命令是主要问题。3有什么办法吗?

rhfm7lfc

rhfm7lfc1#

首先,检查将GH_DEBUG设置为1api是否会生成任何冗长的日志,这可能会对问题有所帮助。

const env = {
    'env': {
         'GH_DEBUG': 'api',
         ...process.env
    }
}

exec('gh auth login --web', env, function (error, stdout, stderr){
    console.log(stdout, stderr, error);
});

其次,检查另一个exec在Express.js中执行时的身份,并将其与您的命令行环境进行比较(在该环境中它确实可以工作)
使用gh auth login --token < aTokenFile(将令牌作为stdin to your execSync call传递)可能比--web更好。

pdtvr36n

pdtvr36n2#

请注意,execSync创建了一个新shell,并在此shell中执行gh命令。
根据操作系统的不同,execSync使用的shell可能与您的终端使用的shell(bash/sh)不同,或者缺少一些您的终端中可用的env变量。这可能解释了"gh auth status"执行显示不同结果的原因。
尝试验证Express应用程序中的环境变量是否与终端中的环境变量不同

相关问题