2017-07-19 68 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/ –