0

所以我刚刚将我的 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
}); 

现在,当我导航到我创建的任何各种网页时,例如 localhost:8080/home,我只会返回 hello world。我认为这是由于我在创建服务器方法中的响应。

如何按预期返回我的网页,或者是否有任何资源可以为我指明正确的方向?

4

3 回答 3

0

我只返回你好世界。我认为这是由于我在创建服务器方法中的响应。

如果您自己创建服务器,则您负责将内容传递给响应。在你的情况下,你总是通过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 */
});

于 2020-04-20T15:44:53.890 回答
0

你已经看过这个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

在与您的服务器公开之前,只需阅读操作指南中的安全问题;)

于 2020-04-20T15:32:47.357 回答
0

这是您必须处理请求的代码:

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

浏览器要求什么并不重要,您编写的代码总是hello world.

如果您想以不同的方式响应,那么您需要注意req对象,查看浏览器的要求并以适当的方式响应。

于 2020-04-20T15:36:37.807 回答