小编Den*_*zus的帖子

Node.js crypto 无法从文件中签署 pem 密钥字符串,错误为:25066067:DSO 支持例程:dlfcn_load:无法加载共享库

我的 Git 目录中有两个并行运行的节点项目。

相同版本的节点 14.5,根中相同的 pem 密钥,一切都相同。然而,一个节点进程能够签署我的 base64 pem 密钥,而另一个节点进程则不能。我可以删除 base64 设置,但仍然有一个进程处理符号,而另一个则不处理。

我从 sign.sign() 方法收到此错误消息。

错误:25066067:DSO 支持例程:dlfcn_load:无法加载共享库

代码如下:

const crypto = require('crypto');

var policy = {
 Statement: [
  {
   Resource: 'https://dev.geolytix.io/mapp/workspace.json',
   Condition: { DateLessThan: { 'AWS:EpochTime': Date.now() + 60 * 60 * 1000 } },
  },
 ],
};
  
var sign = crypto.createSign('RSA-SHA1');

sign.write(JSON.stringify(policy));

var pem = String(readFileSync(join(__dirname, `./mykey.pem`)))

let signature = sign.sign(pem, 'base64')
Run Code Online (Sandbox Code Playgroud)

我注意到将操作系统更新到 Ubuntu 22.04 后出现了问题。

我已清除 openssl(版本 3)并从源代码手动安装 openssl 1.1.1o。https://fedingo.com/how-to-install-openssl-in-ubuntu/ 不幸的是,这将删除其他需要较新版本 OpenSSL 的应用程序,例如 Chrome。

我现在可以手动构建和安装 openssl 3.0.3。加密模块仍然失败。

base64 openssl pem node.js cryptojs

15
推荐指数
1
解决办法
1万
查看次数

Nodejs Express:主机名和来自 req 对象的端口

有时我想从我的节点应用程序通过邮件发送合格的 URL。或者我想设置幻像页面对象的内容。

我在部署设置中获得了这样的完整 URL。

'http://' + req.hostname + '/myapp'
Run Code Online (Sandbox Code Playgroud)

然而,在开发机器上,这通常会产生:

http://localhost/myapp而不是http://localhost:3000/myapp

我知道如何获取端口,但我不想使用类似的东西:

'http://' + req.hostname + ':' + port + '/myapp'
Run Code Online (Sandbox Code Playgroud)

在代理后面部署时会产生这样的废话。

http://domain.com:3000/myapp

如果应用程序在代理外部运行,是否有一种智能方法可以从请求对象获取带有端口的主机名?

proxy hostname node.js express

12
推荐指数
2
解决办法
2万
查看次数

如何在 Puppeteer 中将 addScriptTag() 与本地文件路径一起使用

我正在尝试将 puppeteer 与本地脚本文件一起使用。

当我托管文件并使用addScriptTag()和本地主机地址时,我会加载脚本文件。这并不理想。我需要直接从路径使用本地文件。在本例中,当前工作目录是 /maps。我在 addScriptTag() 函数的选项中将相对路径设置为路径,但在这个阶段代码对我来说只是变黑了。没有错误,也没有介入任何事情。

console.log(`Current directory: ${process.cwd()}`);
// C:\Users\dbauszus\Documents\GitHub\maps
(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.setContent(jsr.templates('./views/report.html').render(), {waitUntil: 'load'});
    // works with an url to the same file.
    // await page.addScriptTag('http://localhost:3000/maps/js/build/report_bundle.js');
    // path for js file on windows C:\Users\dbauszus\Documents\GitHub\maps\public\js\build\report_bundle.js
    await page.addScriptTag({path: 'public\\js\\build\\report_bundle.js'});
    await page.screenshot({path: 'example.png'});
    await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

任何帮助都会受到欢迎,因为我发现木偶文档越来越令人沮丧,而且到目前为止还没有任何工作示例。

javascript puppeteer

5
推荐指数
1
解决办法
9272
查看次数

NGINX代理Zeit Now部署

我有几个应用程序服务器(通过PM2)运行多个Node应用程序。

我有一台NGINX服务器,该服务器具有域的SSL证书和Node应用程序的反向代理。

在NGINX配置文件中,我使用如下的位置块设置域:

server {
        listen 443 ssl;
        server_name
          geolytix.xyz;

        ssl_certificate /etc/letsencrypt/live/geolytix.xyz/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/geolytix.xyz/privkey.pem;

        location /demo {
            proxy_pass http://159.65.61.61:3000/demo;
            proxy_set_header HOST $host;
            proxy_buffering off;
        }

        location /now {
            proxy_pass https://xyz-heigvbokgr.now.sh/now;
            proxy_set_header HOST $host;
            proxy_buffering off;
        }
}
Run Code Online (Sandbox Code Playgroud)

这仅适用于应用程序服务器。Zeit Now部署的代理产生错误的网关。如果我转到部署的Zeit Now地址,则应用程序本身将按预期工作。

有人知道我是否可能会缺少一些设置以代理Zeit Now吗?

reverse-proxy nginx vercel

4
推荐指数
1
解决办法
621
查看次数

Openlayers 3 - wfs-t:更改几何字段的名称

我正在使用以下代码在 openlayers 3 上尝试 wfs-t:

var formatWFS = new ol.format.WFS();
var formatGML = new ol.format.GML({
  featureNS: 'http://argeomatica.com',
  featureType: 'playa_sample',
  srsName: 'EPSG:3857'
  });
var transactWFS = function(p,f) {
  switch(p) {
  case 'insert':
    node = formatWFS.writeTransaction([f],null,null,formatGML);
    break;
  case 'update':
    node = formatWFS.writeTransaction(null,[f],null,formatGML);
    break;
  case 'delete':
    node = formatWFS.writeTransaction(null,null,[f],formatGML);
    break;
    }
  s = new XMLSerializer();
  str = s.serializeToString(node);
  $.ajax('https://gsx.geolytix.net/geoserver/geolytix_wfs',{
    type: 'POST',
    dataType: 'xml',
    processData: false,
    contentType: 'text/xml',
    data: str
    }).done();
  }
Run Code Online (Sandbox Code Playgroud)

但是,当我运行更新事务(ajax 调用)时,它将几何列作为“几何”发送。我需要将其更改为大写“GEOM”:

...

<Property>
<Name>geometry</Name>
Run Code Online (Sandbox Code Playgroud)

...

应该: ...

<Property>
<Name>GEOM</Name>
Run Code Online (Sandbox Code Playgroud)

...

我尝试使用我发现的隐藏属性(geometryName_)设置该功能: …

gis geoserver openlayers-3

3
推荐指数
1
解决办法
2044
查看次数

nginx 代理到子目录中的远程 node.js express 应用程序

我完全陷入了一种情况,即我想在一台服务器上拥有多个节点应用程序。通过在不同端口上运行应用程序,我可以正常工作。我可以通过输入带有端口的 IP 地址来访问应用程序。

我想通过使用不同的子目录从我的 nginx 服务器代理应用程序,如下所示:

my.domain

location /app1 {
  proxy_pass http://10.131.6.181:3001;
}
location /app2 {
  proxy_pass http://10.131.6.181:3002;
}
Run Code Online (Sandbox Code Playgroud)

这样做我不得不将所有快速路由移动到 /app1 的 application1。这有效,但现在我被静态文件困住了。

我现在可以使用http://10.131.6.181:3001/app1访问应用程序,这很棒,但是通过http://my.domain/app1没有加载静态文件。

静态文件可以直接访问http://10.131.6.181:3001/css但不能通过代理http://my.domain/css

理想情况下,我希望将应用程序放在不同的端口上,而没有快速路由中的子目录,而只有代理中的子目录。在过去的 5 个小时里,我试图将头穿过墙壁,但没有取得任何成果。

现在,如果至少可以通过 nginx 代理获取静态文件,我会很高兴。

proxy nginx node.js express

3
推荐指数
1
解决办法
3976
查看次数