NodeJS无法找到路由

时间:2015-03-11 02:26:59

标签: node.js express

更新了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");

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

END UPDATE

我尝试在nodejs中设置路由并且能够显示index.html页面,但是当我点击关于链接时,我得到以下错误: 错误:

  

错误:无法查找视图"关于"在views目录中   " C:\的NodeJS \视图"在EventEmitter.app.render   (c:\ nodejs \ node_modules \ express \ lib \ application.js:519:17)at   ServerResponse.res.render   (c:\ nodejs \ node_modules \ express \ lib \ response.js:933:7)at   在Layer.handle上的exports.about(c:\ nodejs \ routes \ index.js:11:9)[as   handle_request]   (c:\ nodejs \ node_modules \ express \ lib \ router \ layer.js:82:5)下一步   (c:\ nodejs \ node_modules \ express \ lib \ router \ route.js:110:13)at at   Route.dispatch   (c:\ nodejs \ node_modules \ express \ lib \ router \ route.js:91:3)at at   Layer.handle [as handle_request]   (c:\ nodejs \ node_modules \ express \ lib \ router \ layer.js:82:5)at at   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 \表达\ lib中\路由器\ 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.' });
};

这是文件结构:

enter image description here

3 个答案:

答案 0 :(得分:0)

由于您未对视图使用.vash文件扩展名,因此您需要告知Express查找.html以及如何通过添加以下内容来处理它们:

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

答案 1 :(得分:0)

我认为你对此有两件事感到困惑:

  1. 如何表达服务模板
  2. 路由如何工作
  3. 就服务模板而言,最好的资源是阅读有关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
    4. 为此,您需要在 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 文件。

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

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

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

答案 2 :(得分:0)

您的文件扩展名错误。让我们改为

index.html

而不是

<!DOCTYPE html>
<html>
<head>
<title>Learning AJAX PHP</title>
<script type="text/javascript" src="main.js"></script>
</head>
<body>

<button id="lights" onClick="buttonSelect(this.id)">Toggle Lights now</button>

</body>
</html>