路由模块化结构不工作

我已经得到了我的意思应用程序的结构,但现在让我们专注于快速路由,这里是我的结构:

├── 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; }; 

这是我的authentication/ 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时,我收到一条消息:

不能GET / 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; }(); 

debugging('调度%s%s',req.method,req.url);

TypeError:无法读取未定义的属性“方法”

我错过了什么?

正如在评论中所述,这里的问题在于,你提供给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; })(); 

还应该注意的是,如果你使用自调用函数,你需要从你的app.use()调用中的require()方法中去掉括号,如下所示:

 app.use( 'usuario', require( './src/server/modules/auth' ) ); 

很高兴你find你的解决scheme:)