在Node.js / Express中显示视图

时间:2013-03-13 04:11:57

标签: node.js express

我正在关注node.js上的peepcode(第1部分)视频教程,我在前几步中遇到困难。当我尝试转到http://localhost:3000/login时,出现以下错误:

500错误:无法查找视图" / Users / dantang / Desktop / Programming / Node / basic server / hotpie / apps / authentication / views / login"

我猜这是由于一个错字,但我已经尝试过多次更改代码,但我无法弄清楚出了什么问题。如果有人能告诉我该怎么办,真的很感激吗?谢谢!

github回购是https://github.com/tangbj/nodejs

Server.js

/**
 * Module dependencies.
 */

require("coffee-script");

var express = require('express')
  , http = require('http')
  , path = require('path');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});


//Routes
require('./apps/authentication/routes')(app);


http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

login.jade

form(action='/sessions', method='post')
  label
    | Username
    input(type='text', name='user')
  label
    | Password
    input(type='password', name='password')
  input(type='submit', name='Submit')

routes.coffee

routes = (app) ->

  app.get '/login', (req, res) ->
    res.render "#{__dirname}/views/login",
      title: 'Login'
      stylesheet: 'login'

module.exports = routes

的package.json

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "express": "3.1.0",
    "jade": "*",
    "coffee-script": "~1.6.1"
  }
}

2 个答案:

答案 0 :(得分:1)

您的login.jade文件出现了问题。也许有些编码问题。我创建了一个newLogin.jade文件,更改了render函数,一切正常。请参阅github处的拉取请求。

答案 1 :(得分:0)

如果你使用的是需要反斜杠而不是linux中的正斜杠的Windows,它将无法找到路径。因此,请使用path.joinpath.normalize来获取正确的路径。 尝试在routes.coffee

中更改此设置
    res.render "#{__dirname}/views/login",

    res.render path.join(__dirname, "/views/login"),

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

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

否则验证目录/文件的位置。