2017-07-19 65 views
3

我對node.js和express.js非常陌生,所以我覺得我的語法可能有問題,我有以下node.js代碼:express.js中的文件夾無法鏈接

var express = require('express'); 
var path = require('path'); 
var app = express(); 

app.set('port', process.env.PORT); 

app.use(express.static(path.join(__dirname, 'static'))); 
app.get('/', function(req,res){ 
    res.render("/public/index") 
}); 
app.get('/secure', function(req,res){ 
    res.render("/secure/index") 
}); 
var server = app.listen(app.get('port'), function(){ 
    var port = server.address().port; 

}); 

這使我可以很好地訪問安全頁面,但是當試圖訪問公共頁面時,頁面會引發「內部服務器錯誤」,爲什麼?我的文件結構是

static 
-public 
--index.html 
-secure 
--index.html 

如果我移動公衆的index.html成靜態的,然後它工作正常,但是我寧願有上述文件結構,是有反正我能做到這一點?謝謝。

+1

我懷疑它正在尋找模板驅動器的根目錄。嘗試而不是「./ public/index」。 – SamHH

回答

0

當您在yourdomain:yourport/上提出請求時,express會處理app.get("/", ..)中的請求,並發現處理程序爲res.render。所以它會返回一個錯誤,因爲這個函數需要在app.get()之上定義view engine

由於提供的文件是靜態HTML文件,因此您可以刪除app.get()中間件。你已經有static handling middlewareapp.use(express.static(path.join(__dirname, 'static')));

var express = require('express'); 
var path = require('path'); 
var app = express(); 

app.set('port', process.env.PORT); 

app.use(express.static(path.join(__dirname, 'static'))); 

var server = app.listen(app.get('port'), function() { 
    var port = server.address().port; 
}); 

因此得到public頁面,只需提出請求的yourdomain:yourport/public。同時,安全頁面可在yourdomain:yourport/secure處獲得。

0

我有去:

app.use(express.static(path.join(__dirname, 'static'))); 

app.get('/', function(req,res){ 
    res.render("public/index") 
}); 

得到這與你的目錄結構的工作。

+0

謝謝,我只是嘗試了確切的語法,但它仍然拋出相同的錯誤? –

+0

你有什麼版本的Express,以及你正在加載的URL是什麼? 在我的情況下,我的'PORT'是8877,所以我加載:'http:// localhost:8877 /',這給了我靜態/公共/ –

+0

4.13.4頁面,URL加載是通過雲代工https://test-nodejs-app.run.aws-usw02-pr.ice.predix.io/ –