如何在Node.js中显示警报消息

3

我该怎么办?我在使用node.js。我无法使用alert("sometext");

最初的回答:

在node.js中,您不能像在浏览器中一样使用alert()函数来显示消息。相反,您可以使用console.log()函数将消息记录到控制台中。

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("project");

  dbo.collection("Register").findOne({Email:  req.body.email} , function(err, result) {
  if (result.Password == req.body.psw) {
      console.log("Correct go next page");
    }
    else{
      window.alert("sometext");
    });
    db.close();
  });
});

输出 = 引用错误:window未定义

最初的回答


1
没有使用Node的窗口,它在服务器上运行。 - undefined
先生,我该如何打印警告信息? - undefined
你能告诉我为什么需要使用:window.alert("sometext")吗? 而且你是在使用MongoDB和Node.js编写API吗? - undefined
5个回答

7

假设您知道您正在运行的操作系统,最可靠的方法是使用其本机 shell(到目前为止,我尝试过的大多数 NPM 包都无法直接使用)。对于 Windows Powershell,它可能如下所示:

const { spawnSync } = require('child_process');

const messag = "Hello world";

spawnSync("powershell.exe", [`
Add-Type -AssemblyName PresentationCore,PresentationFramework;
[System.Windows.MessageBox]::Show('${messag}');
`]);

你也可以显示提示,例如是/否等。更多信息请参见这里

更新 对话框包似乎可以直接使用,但可用选项似乎没有PowerShell中的多。


找不到类型[System.Windows.MessageBox]。 在第1行的第79个字符处:
  • ... tationCore,PresentationFramework; [System.Windows.MessageBox]::Show(' ...
  • ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    • CategoryInfo : InvalidOperation: (System.Windows.MessageBox:TypeName) [], RuntimeException
    • FullyQualifiedErrorId : TypeNotFound
- undefined
@ClausConrad 你有没有使用Linux或者PowershellCore的机会? - undefined
我尝试了PowerShell Core 7.2.5和Windows PowerShell 5.1,两者都出现了相同的错误信息。 - undefined
@ClausConrad 我猜问题可能出在那台特定机器上的PowerShell缺少某些必要的东西,也许是演示框架的DLL文件?你可以直接在PS中运行该代码并检查吗?或者,你可以尝试使用其他的shell/进程来运行一个来显示消息的进程,看看是否可行? - undefined
那个已经直接在PS中运行了。刚刚在另一台机器上尝试(也是运行Windows 11,可能是问题所在吗?)结果得到了相同的错误。我找到了另一种方法,没有问题,只是好奇为什么这个方法不起作用。 - undefined

5
NodeJS 运行于给定操作系统的控制台,因此 window.alert 实际上是一个浏览器 API 命令,您不能使用它。作为替代方案,您可以:
  1. 使用 console.log,在 STDOUT(也称为标准输出,即在控制台上打印)上输出信息。
  2. 使用 console.error,其功能与上述相同,但会将内容传输到 STDERR,这对于日志记录或进程输出标识目的可能有用。
  3. 将您的 Node 应用程序包装在类似 Electron 的容器中,但说实话,这有些杀鸡焉用牛刀。
  4. 最后,从操作系统调用本地对话框 API:

要调用原生对话框,您需要访问操作系统本机库,您可以使用 Node FFI 模块来绑定这些库。 或者,为了简单起见,只需使用现有实现该函数的一个,例如:node-native-dialogmitsoboxdialog

免责声明:我没有开发或可以证明这些模块的质量,使用时自行承担风险。如果原生对话框确实是您的开发所需,那么请实现自己的操作系统库绑定。


这可能会很有用:https://github.com/bat-tomr/dialog-node - undefined

4

安装跨平台、同构的警告库,适用于Node和浏览器(以前称为alert-node)

npm i alert -g

使用此库:

var alert = require('alert');
alert('Hello');

以防万一有人看到这个,那个包已经被弃用,推荐使用node-notifier,它比我在alert中构建的要好得多。 - undefined

0

我找不到它的文档,但我一直在我的react-native代码中使用global.alert()进行调试。这个应用程序是由Appium控制的,所以我不能使用console.log


0
你也可以给消息框添加标题和消息内容。
const { spawnSync } = require('child_process');

const title = "My Title";
const message = "Hello, world!";

spawnSync("powershell.exe", ["-Command", `Add-Type -AssemblyName PresentationCore,PresentationFramework; [System.Windows.MessageBox]::Show('${message.replace(/'/g, "''")}', '${title.replace(/'/g, "''")}', 0);`]);

[System.Windows.MessageBox]::Show()方法调用的末尾的0指定了消息框应该有一个确定按钮。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接