使用 TypeScript 和 Express,视图不会呈现。而是显示服务器文件

Using TypeScript and Express, views do not render. Instead server files are shown

我正在尝试使用 TypeScript 创建一个网络应用程序。我有我的 app.js 文件创建服务器,但我定义的路由从未被命中。而是显示项目根目录下服务器上的文件。

这是我的代码。

//app.ts
import * as express from 'express';
import * as http from 'http-server';

let app = express();

app.set('port', 443);
app.set('views', './views');
app.set('view engine', 'jade');

app.get('/', function(req: any, res: any) {
    // This code is never reached on 'GET /' requests.
    res.render('index');
});

app.use(function(req: any, res: any, next: any) {});
app.use(function(err, req, res, next) {});

http.createServer().listen(app.get('port'));

console.log("Listening...");

当我去 localhost:443 时,我看到了下图。

在弄乱代码时,我可以执行 app.render() 调用以在调试器中将呈现的 HTML 视为字符串,这超出了我的理解范围配置,但即使只是调用 app.render('index'); 实际上也不会渲染任何东西。以下示例。

app.render('index', function(err: Error, html: string) {
    console.log(html); // Outputs the rendered view, but it is not rendered on the page.
});

你怎么看?

您尝试加载的视图目录必须是完整路径,而不是相对路径。尝试:

app.set('views', path.join(__dirname, 'views'));

您还没有将您的 express 实例用作服务器。

你需要这样做

http.createServer(app).listen(app.get('port'));

app.listen(app.get('port'))

基本上你在没有任何处理程序的情况下调用了你的服务器,所以它显示了你的主脚本目录。

您已经创建了 express 实例,但没有添加到 http 服务器。