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

时间:2017-07-25 19:14:48

标签: javascript node.js express typescript httpserver

我尝试使用TypeScript创建一个webapp。我有我的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时,我遇到了下面的图片。

showing server files instead of rendering

在处理代码时,我能够进行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.
});

您怎么看?

2 个答案:

答案 0 :(得分:1)

您尚未将快递实例用作服务器。

你需要这样做

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

或者

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

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

您已创建快速实例,但未添加到http服务器。

答案 1 :(得分:0)

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

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