【问题标题】:nodejs peepcode tutorial - can't get it to worknodejs peepcode 教程 - 无法正常工作
【发布时间】:2012-04-23 20:17:30
【问题描述】:

我购买了最新的 nodejs peepcode 教程并按照它进行操作,但是我无法通过最初的步骤。

在花了几个小时找出错误的位置后,我感到很沮丧,因为调试 nodejs 对我来说是个谜。

应用结构如下所示:

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

这是我的简单代码:

server.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/authentication/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')

没什么特别的,我在 public/stylesheet/login.css 中有一个样式表文件和 login.css 浏览 http://localhost:3000/ 时,而不是来自 authentication/routes.coffe 的登录模板

Cannot GET /

也没有来自节点的任何其他错误消息:

Express server listening on port 3000 in development mode

我不知道问题出在哪里,这真的很令人沮丧。 可能某处有一些愚蠢的错字,但我无法弄清楚:(

【问题讨论】:

    标签: javascript node.js coffeescript pug express


    【解决方案1】:

    您没有为根“/”配置路由。导航到http://localhost:3000/login 应该返回您的登录视图,该视图由指向资源“/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

    【讨论】:

    • 有趣的是 peepcode 教程并没有说什么,但 localhost:3000/login 也不起作用。已经试过了
    • 你是对的。我有一个我以前没见过的错字,现在 /login 路线有效。真烦人。在 nodejs 中调试此类错误的任何提示?
    • 感谢您的提示。去看看吧。我注意到它已实现到 TextMate JavaScript-Tools Bundlle ;)
    【解决方案2】:

    看起来一切都按预期工作。问题是您没有定义与请求GET / 匹配的路由。您只在 routes.coffee 中定义了匹配 GET /login 的路由;此外,GET /anythinginyourpublicdir 也可以通过 express.static 中间件工作。

    【讨论】:

    • OOpp。对不起,你是对的特雷弗。我之前错过了一个错字。现在 /login 链接有效。必须在 routes.coffe 中添加 {#__dirname}/views/login。真是愚蠢的事情。在 nodejs 中调试东西的任何提示?
    • @PJJ 我想说 Node 很难调试,主要是因为它非常异步。绝对了解 JavaScript 的事件模型是如何工作的。 (Plug:我已经 written a book 讨论了这个问题。)
    • 5 分钟前买的 ;) 感谢您的提示。还有其他要查看的内容吗?
    • @PJJ 您可能希望将“{#__dirname}/views/login”更正为“#{__dirname}/views/login”,以便任何人来这里复制/粘贴。
    猜你喜欢
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多