使用快递node.js的路由但表达。路由器获取未定义

时间:2014-05-08 14:02:18

标签: javascript node.js express

我的默认路由/索引的路由器代码

/* GET home page. */
exports.index = function(req, res){
  res.render('user', { title: 'Abcd' });
};

var express = require('express');

var router = express.Router();

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

router.get('/helloworld', function(req, res) {
    res.render('helloworld', { title: 'Hello, World!' })
});

module.exports = router;

得到错误,因为无法调用未定义的方法获取。我是节点js中的新用户,请任何人帮助我。

2 个答案:

答案 0 :(得分:7)

尝试升级到Express 4.x.你可能正在运行3.x风格。

答案 1 :(得分:1)

路由器是express的中间件,它在第一次使用post()get()时与express对象隐式注册。您可以但不必添加此明确调用use(),这允许您使用express注册各种中间件,因此允许在考虑优先级的情况下配置处理和行为。

正确的初始化和使用可能如下所示:

编辑:将示例更改为“完整”的http服务器。

app.js

var http = require('http');
var express = require('express');

// Requiring express exports a function that creates the application. Call it!
var app = express();

// Set port to listen to
app.set('port', process.env.PORT || 3000);

// Set view engine
app.set('view engine', 'jade');

// Tell express to use the router middleware
// Can be omitted if precedence doesn't matter 
// (e.g. for loading static resources)
app.use(app.router);

// Add callback handler for home (/) route
app.get('/', function(req, res) {
  res.render('index', { title: 'Express' });
});

// Create http server by passing "app" to it:
http.createServer(app).listen(app.get('port'), function() {
  console.log('Express server listening on port ' + app.get('port'));
});

现在,如果您将最小视图放入视图的默认文件夹...

视图/ index.jade

doctype 5
html
  head
    meta(charset='utf-8')
    title #{title}
    meta(name='viewport', content='width=device-width, initial-scale=1.0')
  body
    div
      h1 Gotcha! Title is "#{title}"

...并使用...

从控制台启动服务器
$ node app.js

...你应该启动并运行你的第一个节点/ express / jade应用程序!