我的平均应用程序有这些结构,但现在让我们专注于快速路由,这是我的结构:
├── 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时,我收到如下消息:
无法获得/ usuario / iniciar-sesion
并且控制台上没有任何内容,如果我在 auth / index.js func的末尾使用了一个(),服务器也无法启动:
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:无法读取未定义
的属性'method'
我缺少什么?
答案 0 :(得分:1)
正如评论中所述,这里的问题在于您提供给app.use()
方法的路线需要预先加上" /" - 将域名与网址的路径部分分开是必要的。
像这样:
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' ) );
很高兴你找到了解决办法:)