在node / express中找不到视图

时间:2013-08-23 18:20:13

标签: node.js express

正如我的用户名所暗示的那样,我是node.js的新手。我正在努力学习它。作为此过程的一部分,我正在努力设置一个基本网站。该网站将显示几个基本网页并公开单个REST端点。我的项目结构是:

config.js
home.html
start.js
routes.js
server.js
resources
  css
    style.css
  images
    up.png
    down.png
  javascript
    home.html.js

start.js有我的主服务器代码。该文件使用'node start.js'通过命令行执行。一旦启动,我的服务器就开始侦听端口3000. start.js中的代码如下所示:

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

var UserProfileHandler = require('./app/handlers/UserProfileHandler');

app.configure(function () {
  app.engine('html', require('ejs').renderFile);

  app.set('views', __dirname + '/');

  app.use(express.logger({ stream: expressLogFile }));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

var routes = {
    userProfiles: new UserProfileHandler()
};

function start() {
    routeConfig.setup(app, routes);
    var port = process.env.PORT || 3000;
    app.listen(port);
    console.log("SUCCESS: Server listening on port %d in %s mode", port, app.settings.env);
}

exports.start = start;
exports.app = app;

我的routes.js文件包含以下内容:

function setup(app, routes) {
  viewSetup(app);
  apiSetup(app, routes);
}

function viewSetup(app) {
  app.get('/', function (req, res) {
    res.render("/home.html");
  });

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

function apiSetup(app, routes) {
  app.get('/api/userProfiles/:username', routes.userProfiles.getUserProfiles);
}

我正在尝试在浏览器窗口中加载home.html。我通过访问http://localhost:3000http://localhost:3000/以及http://localhost:3000/home.html来尝试此操作。不幸的是,这些都不起作用。事实上,我收到的错误是:

Express 500错误:无法查找视图“/home.html”

我知道我很亲密。如果我访问http://localhost:3000/api/userProfiles/me,我会收到像我期待的那样的JSON回复。出于某种原因,我似乎无法返回HTML。我的home.html文件如下所示。

<html>
  <head>
    <script type='text/javascript' src='/resources/javascript/home.html.js'></script>
  </head>
  <body>
    We're up and running! <img src='/resources/images/up.png' />
  </body>
</html>

它是一个非常基本的HTML文件。即使HTML回来了,我也担心JavaScript文件和它引用的Image将无法访问。我很担心这个,因为我不确定Node中的路径和工作方式。

如何让home.html在我的节点设置中工作?

谢谢!

2 个答案:

答案 0 :(得分:4)

由于您的视图文件与主文件位于同一文件夹中,因此下面的更改应使其正常工作

1.更改视图文件夹配置行

app.set('views', __dirname + '/');//wont work

app.set('views', __dirname);//will work

2.更改视图渲染线

res.render("/home.html");//wont work

res.render("home.html");//will work

两个更改,视图应该正常工作

更新到以下评论。

您提到的有关图片,css和js的问题是由静态文件夹配置引起的,应该从

更改
app.use(express.static(__dirname + '/public'));

app.use(express.static(__dirname + '/resources'));

因为您的静态文件夹名为resources

但请确保在您的视图中引用css / js / image文件,如

例如:

/css/style.css 
/images/up.png
/images/down.png
/javascript/home.html.js

来自您的视图文件

如果上面的dint工作,检查你是否正确地给出了路径,你也可以试试

app.use(express.static(__dirname + '/resources'));  

之前的

app.use(express.methodOverride());
app.use(app.router); 

这样的行

app.configure(function () {
  app.engine('html', require('ejs').renderFile);
  app.set('views', __dirname + '/');
  app.use(express.static(__dirname + '/public'));
  //try changing the position of above line in app.configure and resatrt node app
  app.use(express.logger({ stream: expressLogFile }));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);          
});

答案 1 :(得分:0)

在我的情况下有类似的问题是 app.set('./views'); 寻找点,不知道为什么,但点会把它弄乱。 我有这样的 app.set('/views') 并且无论如何我都找不到文件夹,直到添加了点。