node.js - 从 JS 函数内部运行命令行(使用 Electron.js)
问题描述
我正在使用 Electron 构建一个销售点应用程序。在程序中的某些时候,我需要打开收银机。这可以通过ECHO>COM3
在我的 Windows 计算机上输入命令提示符或打开包含该命令的 .bat 文件来完成。我以前使用 PHP 打开有效的文件,但我不想使用 PHP,因为它必须在我想使用该程序的每台计算机上安装和配置。
如果我制作这样的javascript函数
function openCashDrawer(){
}
我可以在函数中放入什么来执行我的一行代码?听起来很简单,我已经在网上搜索并尝试了很多东西,但没有任何效果。我认为有一种方法可以通过 node.js 完成,但我不知道它是如何工作的。
我确实nodeIntegration: true
在我的 main.js 文件中设置了
这是我的 package.json 文件
{
"name": "elec",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "electron main.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"electron": "^15.3.0"
}
}
解决方案
这可以通过在 Node.js 中执行 shell 命令来实现,为此exec()
可以从child_process
模块中使用该功能。
输入child_process
为了将 Node 模块与 Electron 一起使用,首先需要启用节点集成,以及远程模块,可以这样设置webPreferences
:
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
enableRemoteModule: true
}
使用以下代码,您可以执行 shell 命令并在需要时处理来自标准输出的响应。
const { exec } = require("child_process");
function openCashDrawer() {
exec("ECHO>COM3", (error, stdout, stderr) => {
if (error) {
console.log(`[ERROR] openCashDrawer: ${error.message}`);
return;
}
if (stderr) {
console.log(`[STDERROR] openCashDrawer: ${stderr}`);
return;
}
console.log(`openCashDrawer: ${stdout}`); // Output response from the terminal
});
}
处理权限不足
通过 Node.js 执行 shell 命令需要提升才能以正确的权限执行。在 Windows 上,这是为了能够以管理员身份执行,解决方法是调整 Node 应用程序,使其具有相应的权限,以便它可以执行 shell 命令。
推荐阅读
- python - 正则表达式匹配失败
- xml - Python3 xml,我怎样才能找到这个非命名空间的 xml 元素?
- php - 如何修改magento 2中产品的描述?
- ios - 在 SceneKit 中播放视频的最佳方式是什么?
- python-3.x - 如何利用每个字符的另外 4 个字节
- ruby-on-rails - 使用 Stripe Checkout,我可以在 Stripe 端验证客户电子邮件地址的唯一性吗?
- angular - 将光标放在焦点输入字段值的末尾 | 角度 2
- javascript - 我正在尝试使用选择列表中的值但没有成功
- java - ClientHandlerException——泽西岛
- javascript - 为什么我的 redux 应用程序中的 state 总是为 null?