我的平均应用程序有这些结构,但现在让我们专注于快速路由,这是我的结构:
├── node_modules
├── src
│ ├── client
│ │ └── ... //Frontend things managed by angular (like views, etc...)
│ └── server
│ ├── modules //By module i mean an entity
| | ├── auth
| | | ├── users.model.js
| | | ├── signin.controller.js
| | | └── index.js
| | └── ...
| ├── config
| └── ...
|
├── package.json
└── server.js
这是我的server.js
/* main module entry point */
'use strict';
var Express = require('express');
var env = require('./src/server/components/config/env');
var db = require('./src/server/components/config/db');
var app = module.exports = Express();
app.use( 'usuario', require( './src/server/modules/auth' )() );
app.listen(env.port, function () {
console.log('Listening to port ' + env.port);
});
这是我的auth/index.js
module.exports = function () {
var express = require('express'),
router = express.Router(),
signin = require('./signin.controller');
router.route( '/iniciar-sesion' )
.get( signin.get )
.post( signin.post );
return router;
};
这是我的auth/signin.controller.js
module.exports = function() {
function get( req, res ) {
console.log('Sign In');
}
function post( req, res ) {
console.log('Sign In');
}
return {
get: get,
post: post
}
}();
当我访问 http://localhost:3000/usuario/iniciar-sesion 时我收到这样的消息:
Cannot GET /usuario/iniciar-sesion
控制台上没有任何内容,如果我在 auth/index.js 函数的末尾使用 (),服务器也不会启动:
module.exports = function () {
var express = require('express'),
router = express.Router(),
signin = require('./signin.controller');
router.route( '/iniciar-sesion' )
.get( signin.get )
.post( signin.post );
return router;
}();
debug('dispatching %s %s', req.method, req.url);
TypeError: Cannot read property 'method' of undefined
我错过了什么?
最佳答案
如评论中所述,这里的问题在于您提供给 app.use()
的路线。方法需要在前面加上“/” - 将域名与 URL 的路由部分分开是必要的。
像这样:
app.use( '/usuario', require( './src/server/modules/auth' )() );
另外,这段代码失败的原因:
module.exports = function () {
var express = require('express'),
router = express.Router(),
signin = require('./signin.controller');
router.route( '/iniciar-sesion' )
.get( signin.get )
.post( signin.post );
return router;
}();
是因为语法错误。如果你想让一个函数是自调用的,你需要把它括在括号里,像这样:
module.exports = (function () {
var express = require('express'),
router = express.Router(),
signin = require('./signin.controller');
router.route( '/iniciar-sesion' )
.get( signin.get )
.post( signin.post );
return router;
})();
还应注意,如果您使用自调用函数,则需要从 require()
中删除括号app.use()
中的方法调用,像这样:
app.use( 'usuario', require( './src/server/modules/auth' ) );
很高兴您找到了解决方案:)
关于javascript - 路线不适用于模块化结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32544168/