учебник nodejs peepcode - не могу заставить его работать

Я купил последний учебник по peepcode nodejs и следовал ему, однако не могу пройти начальный шаг.

Я расстраиваюсь, потратив несколько часов на то, чтобы выяснить, где я получил ошибку, так как отладка nodejs для меня загадка.

структура приложения выглядит так:

example 
  |__public
  |__views
  |__assets 
  |__apps <- instead of routes
  server.js
  package.json

Вот мой простой код:

сервер.js

/**
 * Module dependencies.
 */
require('coffee-script');

var express = require('express');
var app = module.exports = express.createServer();

// Configuration
app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

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

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

app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

/apps/аутентификация/routes.coffee:

routes = (app) ->

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

module.exports = routes

apps/authentication/views/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')

ничего особенного, я получил файл таблицы стилей и login.css в public/stylesheet/login.css вместо шаблона входа из authentication/routes.coffe при просмотре http://localhost:3000/

Cannot GET /

нет никаких других сообщений об ошибках от узла:

Express server listening on port 3000 in development mode

Я не могу понять, в чем проблема, и это действительно расстраивает. Возможно, где-то опечатка, но я не могу понять :(


person Inoperable    schedule 11.04.2012    source источник


Ответы (2)


У вас не настроен маршрут для корня '/'. Переход к http://localhost:3000/login должен вернуть представление входа в систему, указанное маршрутом к ресурсу ' /авторизоваться'. Вам нужно добавить что-то вроде:

app.get '/', (req, res) ->
  #if not logged-in then send to /login else
  res.render('/views/authenticated', 'Home', 'index')

Дополнительные сведения о маршрутизации см. на странице http://expressjs.com/guide.html#routing.

person offner    schedule 11.04.2012
comment
забавно то, что учебник по peepcode ни хрена об этом не говорит, но localhost:3000/login тоже не работает. это тоже уже пробовал - person Inoperable; 11.04.2012
comment
Что ж, ты прав. У меня была опечатка, которую я раньше не замечал, и теперь маршрут /login работает. Действительно раздражает. Любые советы по отладке таких ошибок в nodejs? - person Inoperable; 11.04.2012
comment
Спасибо за совет. Иди проверь. Я заметил, что он реализован в TextMate JavaScript-Tools Bundlle;) - person Inoperable; 11.04.2012

Похоже, все работает как задумано. Проблема в том, что вы не определили маршрут, соответствующий запросу GET /. Вы определили только маршрут, соответствующий GET /login в вашем routes.coffee; Кроме того, GET /anythinginyourpublicdir будет работать благодаря промежуточному программному обеспечению express.static.

person Trevor Burnham    schedule 11.04.2012
comment
OOпп. Извините, вы правы, Тревор. У меня была опечатка, которую я пропустил раньше. Теперь ссылка /login работает. Пришлось добавить {#__dirname}/views/login в route.coffe. Действительно глупая вещь. Любые советы по отладке вещей в nodejs? - person Inoperable; 11.04.2012
comment
@PJJ Я бы сказал, что Node сложно отлаживать, главным образом потому, что он очень асинхронный. Определенно понимать, как работает событийная модель JavaScript. (Плагин: я написал книгу на эту тему.) - person Trevor Burnham; 11.04.2012
comment
Купил 5 минут назад ;) Спасибо за совет. Любые другие чтения, чтобы проверить? - person Inoperable; 11.04.2012
comment
@PJJ Возможно, вы захотите исправить {#__dirname}/views/login на #{__dirname}/views/login для всех, кто приходит сюда и копирует/вставляет. - person Warpling; 16.10.2012