我正在尝试使用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;
当我尝试请求此类网址时:http://localhost:3000/api/v1/user
我在仅限控制台的消息中看到:“API版本的请求” - 所以没有在index.js或user.js中触发代码,
但是如果我删除user.js并将请求处理到索引js(来自user.js的router.route('...'),在这种情况下位于index.js) - 所有warks都很好,我看到了消息取决于VERB并且没有“API版本请求”消息。
所以我的问题:为什么会发生?为什么user.js不包括在内并且如果我从index.js连接它不起作用,在这种情况下我将如何制作模块化应用程序?把所有处理放在index.js中 - 不好,因为我需要/ user,/ news,/ comment等处理我想在单独的文件中处理。
答案 0 :(得分:1)
您的routes / v1 / index.js文件正在导出没有添加路由/中间件的路由器。
在您的routes / v1 / index.js文件中,您可以尝试module.exports = user;
。
您是否考虑过将routes / v1 / user.js内的路由移至routes / v1 / index.js?
(p.s我很陌生)
答案 1 :(得分:1)
与Matt所说的相似,但并不完全;
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;