Deno 是一种新型的 JavaScript 运行时环境,可以让我们在浏览器之外使用 JavaScript。其中,它支持在本地开发环境中启用 HTTPS 访问。但是,在实际使用中,很容易遇到以下问题:
问题描述
当尝试使用 --allow-net
和 --allow-read
参数来执行一个支持 HTTPS 的 Deno 应用程序时,以下错误信息将被触发:
-- -------------------- ---- ------- ------ -------- --- ---------- ------------ - -------- ------ ------- ------- --- --------------------------------------- ----- ------ -- -------- ------------------ --------- --- --------- ---- ------------------------------------ ------- ---------- -
这个错误可能是由于证书颁发机构不被信任或网络设置不正确导致的。
解决方案
为了解决这个问题,我们可以按照以下步骤操作:
步骤1:创建自签名证书
要在本地使用 HTTPS,我们需要创建一个自签名证书。我们可以通过以下命令来生成一个用于开发目的的自签名证书:
openssl req -x509 -newkey rsa:2048 -nodes -sha256 \ -keyout localhost.key -out localhost.crt \ -subj "/CN=localhost" -extensions EXT -config <( \ printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
这将在当前目录下生成 localhost.key
和 localhost.crt
两个文件。
步骤2:设置环境变量
接下来,我们需要设置两个环境变量来使用自签名证书。我们可以通过以下命令完成:
export SSL_CERT_FILE=$PWD/localhost.crt export SSL_KEY_FILE=$PWD/localhost.key
这将把证书和密钥文件路径添加到环境变量中。
步骤3:启动 Deno 应用程序
现在我们可以使用 -ssl-cert
和 -ssl-key
参数来启动支持 HTTPS 的 Deno 应用程序了。我们可以按照以下方式进行:
deno run --allow-net --allow-read \ --unstable -ssl-cert localhost.crt -ssl-key localhost.key \ app.ts
注意,我们还必须添加 --unstable
参数,因为 Deno 上的 TLS 功能目前仍处于实验阶段。
步骤4:测试应用程序
现在我们可以在浏览器中访问 https://localhost:3000/index.html
来测试我们的 Deno 应用程序。
总结
本文中,我们介绍了如何解决 Deno 开启 HTTPS 时可能遇到的问题。我们先创建了一个自签名证书,然后通过环境变量来指定证书和密钥文件的路径,并最终使用 -ssl-cert
和 -ssl-key
参数来启动我们的 Deno 应用程序。如果您遵循了本文中的步骤,现在应该已经可以在本地使用 HTTPS 访问您的 Deno 应用程序了。
示例代码
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ------ - ------------ - ---- ---------------------------------- ----- ------ - ------- ----- ---- --- ------------------- ------- -- ---- ------- --- ----- ------ --- -- ------- - ----- ------- - --- --------- --------------- ----------- --------------- --- ----- ---- - ----------------------------- ------------- -------- ---- --- -
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651a987095b1f8cacd279966