【问题标题】:ExpressJS router middleware cannot render viewsExpressJS 路由器中间件无法渲染视图
【发布时间】:2015-10-22 17:01:04
【问题描述】:

尝试使用 Express Router 中间件设置路由。除了 index.jade (位于路径 http:localhost:3000/ )之外,views 目录下的任何其他模板都不会被渲染并且路由器无法发送模块中设置的任何响应。以下是我的代码的 sn-p:

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 routes = require('./routes/index');
var users = require('./routes/users');

var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

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('/', routes);
app.use('/users', users);

app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
};

app.use(function(err, req, res, next) {
  if (!err) {
    return next();
  }

  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });

  console.error(err.stack);
});

module.exports = app;

routes/index.js

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

router.get('/', function(req, res, next) {
  res.render('index', { title: 'ReQuest' });
});

module.exports = router;

routes/users.js

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

router.get('/users', function(req, res, next) {
  res.send('respond with resource');
});

module.exports = router;

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    routes/users.js 中,您使用 router.get('/users'。我相信应该是router.get('/'。您设置它的方式只会处理对http://localhost:3000/users/users 的请求。

    【讨论】:

    • 如果我想使用router.get('/users')app.js需要做什么?
    • app.js 中对 app.use('/users', users) 的调用会将路由器挂载到 /users 端点。在 users.js 中,该挂载点的根表示为 /,并且路由从那里被认为是相对的。例如,您可以使用router.get('/' 处理对localhost:3000/users 的请求,使用router.get('/prefs' 处理对localhost:3000/users/prefs 的请求。它是这样设计的,因此可以轻松地将路由安装到任何端点,而无需更改路由本身的任何代码。
    【解决方案2】:

    您是否只是想在 index.js 中呈现另一个视图,即

    router.get('/', function(req, res, next) {
      res.render('otherview', { title: 'ReQuest' });
    });
    

    如果是这样,那么我会确保它们被命名为otherview.jade

    否则,如果您试图让您的用户路由来呈现视图,那么您只需要包含 res.render('users'); 并在您的视图目录中创建一个适当的 users.jade 文件。

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 2017-11-20
      • 2021-02-02
      • 1970-01-01
      • 2019-04-25
      • 2020-04-09
      • 2018-01-06
      • 1970-01-01
      • 2023-01-21
      相关资源
      最近更新 更多