正确的模块化结构nodejs +表示API的应用程序

我正在尝试使用Express 4做API的nodejs应用程序。但是当我使应用程序更加模块化时,我的路线不起作用。 有人可以解释我什么是我的错误,什么应该是API的正确的应用程序结构?

我的app.js文件(一些非英语代码被删除):

var app = express(); var v1 = require('./routes/v1/index'); app.use('/api/v1', v1); app.use('/api/v2', function(req, res, next) { console.log('API Version 2'); next(); }); app.use('/api', function(req, res, next) { console.log('Request of API versions'); next(); }); 

我的路线/ v1 / index.js文件:

 var express = require('express'); var router = express.Router(); var user = require('./user'); module.exports = router; 

我的路线/ v1 / user.js文件:

 var express = require('express'); var router = express.Router(); router.route('/') .get(function(req, res, next) { console.log('USERS GET'); }) .post(function(req, res, next) { console.log('USERS POST'); }) .put(function(req, res, next) { console.log('USERS PUT'); }) .delete(function(req, res, next) { console.log('USERS DELETE'); }); router.use(function(req, res, next) { console.log('USERS last Middleware'); }); module.exports = router; 

当我尝试请求这样的url: http:// localhost:3000 / api / v1 / user

我在控制台中看到消息:“API版本的请求” – 所以没有在index.js或user.js中触发代码,

但是,如果我删除user.js并处理请求索引js(router.route('…')从user.js在这种情况下位于index.js) – 所有warks罚款,我看消息依赖于VERB和没有“API版本的请求”消息。

所以我的问题是:为什么会发生? 为什么user.js不包括,如果我从index.js连接它不工作,在这种情况下,我会做模块化的应用程序? 把所有的处理在index.js – 不好,因为我会需要/用户,/新闻,/评论等处理,我想在单独的文件中处理。

您的routes / v1 / index.js文件正在导出一个没有添加路由/中间件的路由器。

在你的routes / v1 / index.js文件中,你可以试试module.exports = user;

你有没有想过将routes / v1 / user.js中的路由移动到routes / v1 / index.js?

(ps我很新的expression)

类似马特所说的,但不完全;

 var express = require('express'); var router = express.Router(); var user = require('./user'); module.exports = router; 

这没有做什么,你需要告诉你的路由器使用'用户'文件。

 var express = require('express'); var router = express.Router(); router.use('/user', require('./user')); module.exports = router;