【问题标题】:node.js express app can't find jade view, 404 message respondednode.js express app找不到jade view,404消息响应
【发布时间】:2017-04-11 03:43:49
【问题描述】:

对于我的应用程序,我使用 node.js 作为后端,使用 Express 作为框架。我使用 Netbeans 作为 IDE,我得到以下输出。

Not Found
404

Error: Not Found
at /home/ingeborg/netbeans/GML/app.js:33:13
at Layer.handle [as handle_request] (/home/ingeborg/netbeans/GML/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/home/ingeborg/netbeans/GML/node_modules/express/lib/router/index.js:317:13)
at /home/ingeborg/netbeans/GML/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/home/ingeborg/netbeans/GML/node_modules/express/lib/router/index.js:335:12)
at next (/home/ingeborg/netbeans/GML/node_modules/express/lib/router/index.js:275:10)
at /home/ingeborg/netbeans/GML/node_modules/express/lib/router/index.js:635:15
at next (/home/ingeborg/netbeans/GML/node_modules/express/lib/router/index.js:260:14)
at Function.handle (/home/ingeborg/netbeans/GML/node_modules/express/lib/router/index.js:174:3)
at router (/home/ingeborg/netbeans/GML/node_modules/express/lib/router/index.js:47:12)

我有以下数据设置:

- node-modules
- public
    - fonts
    - images
    - javascripts 
    - stylesheets
        stylesheets.less
        stylesheet.css
    - routes
        index.js
        news.js
        users.js
    - views
        index.jade
        error.jade
        news.jade
        layout.jade
    Gruntfile.js
    app.js
    gulpfile.js
    package.json

app.js 看起来像这样

var news  = require('./routes/news');
var index = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
...
app.use('/', index);
app.use('/index', index);
app.use('/news', news);
app.use('/users', users);

这是我的 index.jade

h3 
  a(href="news") link

这是我的news.jade

h3 test

.

路由是通过路由文件实现的。 index.js

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('index');
});

router.get('/index', function(req, res, next) {
    res.render('index');
});
module.exports = router;

news.js 路由文件是

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('news', function(req, res, next) {
    res.render('news');
});
module.exports = router;        

以下情况是

  • 链接“/”和“index”上的路由可以正常工作。
  • “/news”或“news”上的路由(在 rounting、app.js 和视图文件中测试)不是。我不知道为什么路由不起作用。我希望我没有忘记某事。

谢谢, 英格

【问题讨论】:

    标签: node.js express pug


    【解决方案1】:

    你的代码对我有用。

    /app.js

    var express = require('express');
    var path = require('path');
    var favicon = require('serve-favicon');
    var logger = require('morgan');
    var cookieParser = require('cookie-parser');
    var bodyParser = require('body-parser');
    
    var index = require('./routes/index');
    var news  = require('./routes/news');
    var users = require('./routes/users');
    
    var app = express();
    
    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'jade');
    
    // uncomment after placing your favicon in /public
    //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
    app.use(logger('dev'));
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));
    
    app.use('/', index);
    app.use('/users', users);
    app.use('/news', news);
    
    // catch 404 and forward to error handler
    app.use(function(req, res, next) {
      var err = new Error('Not Found');
      err.status = 404;
      next(err);
    });
    
    // error handler
    app.use(function(err, req, res, next) {
      // set locals, only providing error in development
      res.locals.message = err.message;
      res.locals.error = req.app.get('env') === 'development' ? err : {};
    
      // render the error page
      res.status(err.status || 500);
      res.render('error');
    });
    
    module.exports = app;
    

    /routes/news.js

    var express = require('express');
    var router = express.Router();
    
    /* GET home page. */
    router.get('/', function(req, res, next) {
        res.render('news');
    });
    module.exports = router;   
    

    【讨论】:

    • 你用的是哪个IDE?
    • 我使用 Sublime Text。上面的例子是由 express cli 生成器 express --view=jade myapp expressjs.com/en/starter/generator.html 创建的
    • 现在知道了。在我将“/news”删除为“/”后,jade 文件中的“/”丢失了。非常感谢您的帮助!
    【解决方案2】:

    新闻路由文件丢失。在那里你必须渲染你的玉石。

    var news  = require('./routes/news');
    

    【讨论】:

    • 在 app.js 中?是第一行还是属于别的地方?
    • 您在 app.js 上指定将文件 /routes/news.js 用于所有 /news 路由,但在您的数据设置列表中,路由文件夹中缺少 news.js 文件。跨度>
    • 我刚刚看到的第二件事是你两次路由到 /news/news,一次在 app.js 中通过 app.use('/news', news);第二次通过 news.js 文件 router.get('news', function(req, res, next) .. sou 你可以尝试访问localhost:3000/news/news 或更改 router.get('news'...到你的 news.js 中的 router.get('/'... 。
    • 完成。 404.比较一下索引视图的路由。有相同的代码。
    • news.js 在路由文件中。是我的错误。这是设置的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2012-08-07
    相关资源
    最近更新 更多