Node.js Express不能使用路由

我创build了一个简单的Node.js应用程序,我无法设置任何路线。 我得到以下错误:

/Users/rexhin/Desktop/Exercise Files/02_03/finished/node/routes/index.js:5 router.get('/', function(req, res) { ^ TypeError: Cannot read property 'get' of undefined at Object.<anonymous> (/Users/rexhin/Desktop/Exercise Files/02_03/finished/node/routes/index.js:5:7) at Module._compile (module.js:571:32) at Object.Module._extensions..js (module.js:580:10) at Module.load (module.js:488:32) at tryModuleLoad (module.js:447:12) at Function.Module._load (module.js:439:3) at Module.require (module.js:498:17) at require (internal/module.js:20:19) at Object.<anonymous> (/Users/rexhin/Desktop/Exercise Files/02_03/finished/node/app.js:4:14) at Module._compile (module.js:571:32) 

我不知道问题在这里,因为我已经包含了所有必需的模块。

我的文件是:

app.js

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

/routes/index.js

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

package.json

 { "name": "ExpressHello", "version": "0.0.0", "description": "Simple Express Application", "main": "app.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Rexhin", "license": "ISC", "dependencies": { "express": "^3.5.1" } } 

应该。 / *获取主页。 * /

 router.get('/', function(req, res) { res.render('index', { title: 'Express' }); }); //this the editted code below, you forgot the route functor. router.route('/').get(function(req, res) { res.render('index', { title: 'Express' }); }); 

你有两种方法可以使用Express +4.0路由,或者使用var app = express()这个应用程序实例,它可以让你挂钩到主要的中间件应用程序(main)并且可以用这种方式访问​​。

 app.get('/example/a', function (req, res) { res.send('Hello from A!') }); 

或从express.Router()这是更多的单一本地化路由中间件(不是主要应用程序)的路由器实例。

可以用这种方式访问​​。

 var router = express.Router(); router.route('route').get(function(req,res){}); router.route('route').post(function(req,res){}); 

但是你必须返回路由器实例,并附加到主应用程序中间件,但是因为你返回了一个express.Router()实例,所以你需要使用名称限定符来限定中间件路由。

 app.use('some_route',router); 

虽然这是有效的。

 // define the home page route router.get('/', function (req, res) { res.send('home page') }) 

只是不推荐。

 app.use(routes); //this line, i am guessing it is the imported module with the router. 

尝试这个。

 app.use('/',routes); 

您的路由器实例可能为空的另一个原因可能是您用来检索文件的path。 再次检查绝对path,因为再次查看错误指示路由器不存在。

 var routes = require('./routes/index'); is it valid ? 

问题是您的版本3.5.1升级。 执行npm uninstall express --save然后npm install --save express

你使用的是最新版本的快递包裹吗? 你可以分享你的package.json的内容吗?

express.Router方法在Express 4.x版本中添加。 如果您使用Express 3.x的旧版本,那么express.Router方法可以被另一个模块添加,该模块可能不会返回任何导致路由器variables未定义的任何内容。

package.json中的Express版本是^3.5.1但由于某些原因npm没有下载Express ^4.xx所以解决方法是删除node_modules文件夹,将Express版本更新到^4.15.0 ,然后再次运行npm install。