繁体   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