2017-07-25 61 views
0

我正在嘗試使用TypeScript創建Web應用程序。我有我的app.js文件創建一個服務器,但我定義的路線從未被擊中。相反,會顯示項目根目錄下的服務器上的文件。使用TypeScript和Express,視圖不會呈現。而是顯示服務器文件

這是我的代碼。

//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. 
}); 

您怎麼看?

回答

1

你沒有使用你的Express實例的服務器。

你需要這樣做

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

或者

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

基本上你叫無任何處理您的服務器,那麼就說明你的主腳本的目錄。

您已創建快速實例,但未添加到http服務器。

+0

對於TypeScript,http-server軟件包不支持'http.createServer(app)'只有'http.createServer(Options?| undefined);'所以我無法使用它。然而,你的第二個解決方案的確有竅門。謝謝! – James

0

您嘗試加載的視圖的目錄需要是完整路徑,而不是相對路徑。嘗試:

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

相關問題