【问题标题】:NodeJS failing to find routesNodeJS 找不到路由
【发布时间】:2015-05-12 16:58:12
【问题描述】:

更新Server.js代码:

/Server.js

var express = require('express');

var app = express();
var bodyParser = require('body-parser');

app.set('view engine', 'vash');
app.set('views', path.join( __dirname, '/views') );

app.use(express.static(__dirname + "/public"));
app.set('views', path.join(__dirname, 'views'));

var indexRoutes = require('./routes/index')
app.use('/', indexRoutes);

app.use(bodyParser.json()); 

app.listen(3000);
console.log("yep >>> Server running on port 3000");

我仍然没有找到相同的错误

结束更新

我正在尝试在 nodejs 中设置路由并使其能够显示 index.html 页面,但是当我单击关于链接时,出现以下错误: 错误:

错误:无法在视图目录中查找视图“关于” EventEmitter.app.render 中的“c:\nodejs\views” (c:\nodejs\node_modules\express\lib\application.js:519:17) 在 ServerResponse.res.render (c:\nodejs\node_modules\express\lib\response.js:933:7) 在 export.about (c:\nodejs\routes\index.js:11:9) 在 Layer.handle [as 处理请求] (c:\nodejs\node_modules\express\lib\router\layer.js:82:5) 在下一个 (c:\nodejs\node_modules\express\lib\router\route.js:110:13) 在 路线调度 (c:\nodejs\node_modules\express\lib\router\route.js:91:3) 在 Layer.handle [as handle_request] (c:\nodejs\node_modules\express\lib\router\layer.js:82:5) 在 c:\nodejs\node_modules\express\lib\router\index.js:267:22 at Function.proto.process_params (c:\nodejs\node_modules\express\lib\router\index.js:321:12) 在下一个 (c:\nodejs\node_modules\express\lib\router\index.js:261:10)

/Server.js

var express = require('express');
//route
var routes = require('./routes');
var path = require('path');

var app = express();
var bodyParser = require('body-parser');

app.use(express.static(__dirname + "/public"));
app.set('views', path.join(__dirname, 'views'));

app.set('view engine', 'vash');

app.get('/', routes.index);
app.get('/about', routes.about);
app.get('/contact', routes.contact);
app.use(bodyParser.json()); 
app.listen(3000);
console.log("yep >>> Server running on port 3000");

/routes/index.js

exports.index = function (req, res) {
    res.render('index', { title: 'Express', year: new Date().getFullYear() });
};

exports.about = function (req, res) {
    res.render('about', { title: 'About', year: new Date().getFullYear(), message: 'Your application description page.' });
};

exports.contact = function (req, res) {
    res.render('contact', { title: 'Contact', year: new Date().getFullYear(), message: 'Your contact page.' });
};

这是文件结构:

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    由于您的视图没有使用 .vash 文件扩展名,因此您需要告诉 Express 查找 .html 以及如何通过添加来处理它们:

    app.engine('html', require('vash').renderFile);
    

    【讨论】:

    • 我已经尝试过你的方法但没有奏效,得到同样的错误,我已经更新了我的问题。
    【解决方案2】:

    我认为您在这里对两件事感到困惑:

    1. express 如何提供模板
    2. 路由的工作原理

    就服务模板而言,最好的资源是阅读有关res.render(..)的官方文档

    如果您希望 vash 成为您的默认模板引擎,那么您应该提及:

    app.set('view engine', 'vash');
    app.set('views', path.join( __dirname, '/views') );
    

    接下来是关于在路由上提供 .vash 文件。

    在此之前,让我先更正您的路线。 如果我正确理解您要实施的以下路线:

    1. http://localhost:3000/
    2. http://localhost:3000/about
    3. http://localhost:3000/contact

    为此,您需要在 server.js 中添加这些行:

    var indexRoutes = require('./routes/index')
    app.use('/', indexRoutes);
    

    您可以将 ./routes/index.js 文件更改为:

        var router = express.Router();
        /* GET home page. */
        router.get('/', function(req, res) {
          res.render('indexTpl', {title: 'Express', year: new Date().getFullYear()},            
             function(err, html) {
               // ...
             });
        });
        router.get('/about', function(req, res) {
          res.render('aboutTpl', { title: 'About', year: new Date().getFullYear(), message: 'Your application description page.' },            
             function(err, html) {
               // ...
             });
        });
    router.get('/', function(req, res) {
          res.render('contactTpl',{ title: 'Contact', year: new Date().getFullYear(), message: 'Your contact page.' },            
             function(err, html) {
               // ...
             });
        });
        module.exports = router;
    

    请注意,我将模板名称更改为 indexTpl.vish、contactTpl.vish、aboutTpl.vish。在运行程序之前,请确保您的 'views' 文件夹中有这些 .vish 文件。

    注意:当我们在 index.js 文件中使用路由器时,您可以在 server.js 中评论下面提到的三行:

    app.get('/', routes.index);
    app.get('/about', routes.about);
    app.get('/contact', routes.contact);
    

    请参阅this 示例以获得更多理解。

    【讨论】:

    • 我仍然遇到同样的错误,我已经用 Server.js 更新了我的问题,请看看
    • 我认为您没有正确阅读我的答案,请再次阅读并相应地更新您的项目。它应该可以工作,如果您仍然遇到问题,请分享您的存储库链接,我会看看并在我自己的系统中运行它。
    【解决方案3】:

    您的文件扩展名错误。我们换成

    index.vash
    

    而不是

    index.html
    

    【讨论】:

      猜你喜欢
      • 2015-12-10
      • 2016-11-15
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 2018-08-03
      • 1970-01-01
      相关资源
      最近更新 更多