2016-12-25 172 views
1

我試圖路由多個HTML頁面。它加載index.html文件,但是當我想加載raw.html,它說如何路由HTML節點js Express js

Error: Failed to lookup view "error" in views directory

app.js

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var raw = require('./routes/raw'); 


var app = express(); 


// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/users', users); 
app.use('/raw', raw); 

/routes/index.js

var express = require('express'); 
var router = express.Router(); 
var path = require('path'); 

router.get('/', function(req, res) { 
    res.sendFile(path.join(__dirname + '/public/index.html')); 

}); 
module.exports = router; 

/routes/raw.js

var express = require('express'); 
var router = express.Router(); 
var path = require('path'); 

router.get('/raw', function(req, res) { 
    res.sendFile(path.join(__dirname + '/public/raw.html')); 

}); 
module.exports = router; 
+0

是否安裝了Jade – Nane

+0

是的,它是默認安裝的。 – Rabbit

+0

可能幫助,試試這個** res.sendFile('raw。html'); ** – Nane

回答

0

你在評論中提到你想要你se角度,所以... 如果你想使用Angular,你不需要視圖引擎。

當使用Angular時,您的網站的「主要」部分位於客戶端的index.html文件中(這不是100%正確的,只是一個示例)。 該部分(在用戶瀏覽器中)具有向服務器發送http請求的JS代碼(Angular) - $http

服務器部分basicaly只是操作這些請求,並將數據發回給客戶端的Angular,然後您在客戶端執行任何您想要的數據。 您可以使用Node,PHP等響應這些請求。 這與AJAX背後的想法類似,只是在頁面的小部分內容被更改而不重新加載整個頁面時。

在另一方面,如果你使用的視圖引擎,當服務器收到一個請求,例如:

app.get('/',.routes.views.home); 

服務器呈現一個完整的HTML頁面,並將其發送給客戶端,因爲它適用於PHP。

1

您正在配置快速使用pug(以前稱爲)模板引擎。

A template engine enables you to use static template files in your application. At runtime, the template engine replaces variables in a template file with actual values, and transforms the template into an HTML file sent to the client. This approach makes it easier to design an HTML page.

你上面提到的錯誤是因爲你沒有在views目錄中名爲error.pug一個模板文件。模板引擎會捕獲第一個錯誤,即:

Error: ENOENT: no such file or directory,

然後嘗試呈現錯誤模板。

res.sendFile(path.join(__dirname + '/public/index.html')); 

在文件上面的線routes/index.js將嘗試發送routes/public/index.html和該文件不存在。

你可以在你的請求處理程序使用正確的路徑解決您的快速配置,即:

router.get('/', function(req, res) { 
    res.sendFile(path.join(__dirname + '/../public/index.html')); 
}); 

你也應該刪除模板引擎的配置,因爲你似乎使用它沒有。

+0

謝謝。它顯示index.html,但它仍然不顯示raw.html(/ raw)或任何其他html文件(/ about或/ calculation)。任何想法呢? – Rabbit

+0

在路由器文件中將'/ raw'更改爲'/'。路線現在是'/ raw/raw' – rckrd