【问题标题】:I want to render a node.js page with headers served by http2我想渲染一个带有 http2 服务的标头的 node.js 页面
【发布时间】:2021-07-29 17:18:33
【问题描述】:

我找不到答案。

当我使用 HTTP2 模块时,我如何提供 EJS 标头,它们通常位于应用程序根目录的“views/partials”目录中 服务器实例。

这是我的代码:

const http2 = require("http2")
const fs = require("fs")

const server = http2.createSecureServer({
        "key": fs.readFileSync("./ssl/private.pem"),
        "cert": fs.readFileSync("./ssl/cert.pem")
})

server.on("stream", (stream, headers) => {

        stream.respond({
                "content-type": "application/json",
                "status": 200
        })

        stream.end(JSON.stringify({
                "user": "Moi",
                "id": "823"
        }))
})

server.listen(443);
console.log("listening on port 443");

我想实现与此文本块后面的代码中相同的事情,然后在此文本块上方的代码中做到这一点。 在原始代码中,它使用“reviews.ejs”文件中的<%- include('partials/header'); %> 呈现。 (该文件是 rendered 从还包含 partials 目录的视图目录中得到的,该目录包含 header.ejs 文件和 footer.ejs)。

所以,我需要复制以下代码:

app.get("/reviews", function(req, res) {
  res.render("reviews"); // I need to replicate this line with HTTP2!
});

我需要复制这个:

app.post("/updated", function(req, res) {
  username = req.body.username;
  email = req.body.email;

  console.log(username, email);
  res.redirect("/");
});

那么,我的最后一个问题是,如何在第一个 sn-p 的代码中复制最后两个 sn-ps 代码? 咳嗽 咳嗽我的眼睛是方形的咳嗽

(或者任何更好的方法来使用 SSL,并像使用 EJS / view engine w/ 的旧网站一样呈现我的新网站部分标题)?


|_|>(我):

谢谢(你可能是个书呆子,无意冒犯)。

【问题讨论】:

    标签: node.js ssl rendering http2 partials


    【解决方案1】:

    您可以通过以下方式将 express 应用程序挂载到您正在使用的 HTTP 服务器上。

    const server = http2.createSecureServer({
        "key": fs.readFileSync("./ssl/private.pem"),
        "cert": fs.readFileSync("./ssl/cert.pem")
    }, app); // app is Express application that is a function that can handle HTTP requests.
    server.listen(...);
    

    更新:我不确定 Express 是否支持 http2,但如果您需要的是 SSL,我确信相同的代码将适用于 https 模块。

    【讨论】:

    • 谢谢。是的,我真的想让 SSL 在我的网站上运行。这真的很难找到一个像样的解释。特别是,现在我正在寻找一种方法来呈现页面以及标题,同时具有 SSL 功能。
    • 如果我的回答对您有帮助,请标记为正确。
    • 对不起,我是新人,还不能投票。如何将其标记为正确?
    • 当您将鼠标悬停在我的答案上时,在赞成票和反对票附近,正下方应该有一个复选图标。
    • 罗杰。检查了它。那么,你能告诉我应该如何创建 https 路由吗?或者,我是否只使用 App 方法?我还没有时间尝试您的解决方案。请指点我的文档。我需要一种提供证书的方法,以及一种呈现与我使用的 EJS 视图引擎相同的标题的方法。我想要 SSL 并使用具有多个页面的相同(特定)页眉和页脚文件。 HTTPS 库是否涵盖它?首先,我只想要托管 CA 证书的最佳方式,我已经拥有该证书。 https 上的所有内容并使用带有 EJS 的页眉/页脚。
    【解决方案2】:

    在此处找到解决方案:[https://www.youtube.com/watch?v=USrMdBF0zcg][1]

    const express = require('express')
    const https = require('https')
    const path = require('path')
    const fs = require('fs')
    
    const app = express()
    
    app.use('/', (req, res, next) => {
      res.send('Hello from SSL server')
    })
    
    // app.listen(3000, () => {})
    
    const sslServer = https.createServer({
      key: fs.readFileSync(path.join(__dirname, 'cert', 'key.pem')),
      cert: fs.readFileSync(path.join(__dirname, 'cert', 'cert.pem'))
    }, app)
    
    sslServer.listen(3443, () => console.log('Secure Server on port 3443'))
    
    
    // SELF-SIGNED CERTIFICATE
    // openssl genrsa -out key.pem
    // openssl req -new -key key.pem -out csr.pem
    // openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out cert.pem
    

    仍然需要检查我的 Post 路由是否有效...

    【讨论】:

      【解决方案3】:

      基本上我现在拥有的是:

      require('dotenv').config();
      const express = require('express');
      const bodyParser = require('body-parser');
      const ejs = require('ejs');
      const favicon = require('serve-favicon');
      const https = require('https');
      const path = require('path');
      const fs = require('fs');
      
      const app = express();
      
      const audience_id = process.env.AUDIENCE_ID;
      const api_key = process.env.API_KEY;
      const api_string = "thisIsNotMyRealAPIKeyPhrase:" + api_key;
      
      const url = "https://us1.api.mailchimp.com/3.0/lists/" + audience_id;
      
      const server = https.createServer({
        key: fs.readFileSync(path.join(__dirname, 'cert', 'key.pem')),
        cert: fs.readFileSync(path.join(__dirname, 'cert', 'cert.pem'))
      }, app)
      
      app.use(favicon(__dirname + "/public/images/favicon.ico"));
      app.use(express.static("public"));
      app.set("view engine", "ejs");
      
      app.use(bodyParser.urlencoded({
        extended: true
      }));
      
      app.get("/", function(req, res) {
        res.render("home");
      })
      
      // etc ...
      

      在文件末尾:

      server.listen(3443, () => console.log('Secure Server on port 3443'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-19
        • 1970-01-01
        • 1970-01-01
        • 2020-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多