簡體   English   中英

HTTPS 節點服務器不返回 web 頁面

[英]HTTPS node server doesn't return web pages

所以我剛剛將我的 HTTP web 申請轉到 HTTPS。

所以我的 server.js 目前看起來像

const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8080);

這是一個 marko js 項目,我的 server.js 曾經看起來像

require("./project").server({
  httpPort: process.env.PORT || 8080 // Optional, but added here for demo purposes
}); 

現在,當我導航到我創建的各種 web 頁面中的任何一個時,例如 localhost:8080/home,我只返回你好世界。 我認為這是由於我在創建服務器方法中的響應。

如何按預期返回我的 web 頁面,或者是否有任何資源可以為我指明正確的方向?

你已經看過這個howto了嗎? https://nodejs.org/en/knowledge/HTTP/servers/how-to-serve-static-files/

http.createServer(function (req, res) {
  fs.readFile(__dirname + req.url, function (err,data) {
    if (err) {
      res.writeHead(404);
      res.end(JSON.stringify(err));
      return;
    }
    res.writeHead(200);
    res.end(data);
  });
}).listen(8080);

它與http一起使用,但我假設您也可以嘗試https

在與您的服務器公開之前,只需閱讀操作指南中的安全問題;)

這是您必須處理請求的代碼:

 https.createServer(options, function (req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8080);

瀏覽器要求什么並不重要,您編寫的代碼總是hello world響應。

如果你想用不同的東西回應,那么你需要注意req object,看看瀏覽器要求什么,並用適當的東西回應。

我只返回你好世界。 我認為這是由於我在創建服務器方法中的響應。

如果您自己創建服務器,則您負責將內容傳遞給響應。 在你的情況下,你總是通過hello world 這個例子展示了如何在創建自己的 http 服務器時專門渲染 Marko。

要點是這樣的。 盡管如果您有多個頁面,則需要根據req.url呈現不同的模板。

const page = require('./path/to/page.marko');
https.createServer(options, function (req, res) {
  res.setHeader('Content-Type', 'text/html');
  page.render({ data:123 }, res);
}).listen(8080);

但是,您似乎正在使用marko-starter項目。 因此,對於這個項目,要啟用https ,您可以將sslCertsslKey作為選項傳遞給項目配置。

module.exports = require('marko-starter').projectConfig({
  sslKey: fs.readFileSync('key.pem'),
  sslCert: fs.readFileSync('cert.pem')
  /* other config */
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM