【问题标题】:Unhandled promise rejection in Docker with 'opn' npm module使用“opn”npm 模块在 Docker 中未处理的承诺拒绝
【发布时间】:2017-01-08 12:50:34
【问题描述】:
UnhandledPromiseRejectionWarning: Unhandled promise
rejection (rejection id: 1): Error: Exited with code 3

当我使用 Docker 容器中的模块打开链接时,我显然得到了这个错误。在将代码放在使用 Docker 的服务器上之前,我在本地测试了代码。它在我本地不使用 Docker 的情况下运行良好。所以我认为 docker 出了点问题,但实际上没有办法找出问题所在。有没有人曾经在 Docker 中使用过“opn”模块?

app.use('/:encoded_id', function(req, res) {
let base58Id = req.params.encoded_id;
let id = base58.decode(base58Id)
Url.findOne({ _id:id }, function(err, doc) {
    if (err) console.error(err);
    if (doc) {
      opn(doc.long_url[i]);
     }
    else res.redirect(config.webhost);
 })
});

【问题讨论】:

  • 您必须对这个问题更具体地很多;调用opn 的代码在哪里?添加process.on('unhandledRejection', err => { console.error(err.stack); throw err; }); 以便您查看实际错误。
  • @Jacob 我刚刚添加了代码。顺便说一句,在我将服务器的节点版本设置为与本地版本相同后,它不再说承诺错误,但仍然没有打开任何链接。
  • @Jacob 我将尝试添加您的代码,但我不确定应该将代码放在哪里。
  • 它应该只在启动期间运行。我的代码用于记录错误,而不是修复任何东西(因为我不知道出了什么问题);你看到了什么错误?
  • @Jacob pastebin.com/uAEW8JCT 这就是我得到的

标签: javascript node.js docker npm promise


【解决方案1】:

Exit code 3 表示:

找不到所需的工具。

你说目标是“打开链接”,所以 Docker 容器可能没有浏览器(或者至少没有默认浏览器,无论如何)。

如果您确定所需的软件已安装,则可能是配置问题。在这种情况下,您可以通过指定app option 来解决它。但尽量避免使用它,因为它依赖于平台,因此会降低您的代码的可移植性。

【讨论】:

  • 为什么 Docker 假设有浏览器?我只希望人们在进入我的网站而不是 docker 时打开链接。
  • opn 用于在桌面环境中打开文件/URLs/等;你想做什么?我很困惑你所说的“开放链接”是什么意思。你的意思是超链接<a/>标签?!
  • @Jacob 我正在制作一个将多个链接压缩为一个链接的网站。如果我尝试在客户端打开多个链接(使用 javascript),弹出窗口阻止程序会阻止打开多个链接。但是如果我在服务器端使用opn 模块,它可以帮助我避免弹出窗口阻止程序。所以基本上这就是我使用opn的原因
  • 哦,伙计... opn 在您的 本地 计算机上工作,因为它在您自己的计算机上打开链接;它不会让远程服务器打开客户端桌面上的链接!
  • @Jacob 有什么办法可以做我想做的事吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 2018-03-31
相关资源
最近更新 更多