Javascript 不在模块化结构中工作的路由
我已经为我的mean应用程序准备了这些结构,但现在让我们关注快速路由,以下是我的结构:Javascript 不在模块化结构中工作的路由,javascript,node.js,express,Javascript,Node.js,Express,我已经为我的mean应用程序准备了这些结构,但现在让我们关注快速路由,以下是我的结构: ├── node_modules ├── src │ ├── client │ │ └── ... //Frontend things managed by angular (like views, etc...) │ └── server │ ├── modules //By module i mean an entity | | ├── auth |
├── 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);
});
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() {
function get( req, res ) {
console.log('Sign In');
}
function post( req, res ) {
console.log('Sign In');
}
return {
get: get,
post: post
}
}();
这是我的auth/index.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);
});
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() {
function get( req, res ) {
console.log('Sign In');
}
function post( req, res ) {
console.log('Sign In');
}
return {
get: get,
post: post
}
}();
这是我的auth/sign.controller.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);
});
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() {
function get( req, res ) {
console.log('Sign In');
}
function post( req, res ) {
console.log('Sign In');
}
return {
get: get,
post: post
}
}();
当我访问时,会收到如下消息:
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;
})();
无法获取/usuario/iniciar session
控制台上没有任何内容,如果在auth/index.jsfunc末尾使用()也会导致服务器无法启动:
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;
}();
调试('分派%s%s',请求方法,请求url)
TypeError:无法读取未定义的属性“method”
我遗漏了什么?如评论中所述,这里的问题在于您提供给
应用程序的路由。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( 'usuario', require( './src/server/modules/auth' ) );
很高兴您找到了解决方案:)读取app.use('usuario',require('./src/server/modules/auth')())的代码行代码>-该url指向auth文件夹,您是否尝试直接指向单个.js文件?另外,确保在路由名称前加上/,如:app.use('usuario',require('./src/server/modules/auth/index')()哦,谢谢,我不知道!,但是没有必要像这样称呼它:'./src/server/modules/auth/index'
,这是有效的:app.use('/usuario',require('./src/server/modules/auth')()代码>太好了,所以问题解决了?你可能想回答你自己的问题:)嗯,是的,问题解决了,但我也想知道为什么在func auth/index.js的末尾使用()
会出现错误,也许你应该回答,所以我接受你的答案:)Thnks,你能解释一下自调用函数和其他函数之间的区别吗?它们被调用了什么?区别在于调用函数的时间和方式。自调用函数调用它们自己,因此它们可以保持匿名性并一次性返回值。括号只是实现这一点的语法,其他任何东西都只是需要不同语法的标准函数。嗯,所以在本例中,使用括号中的任何一个都不会有任何困难,对吗?两者都很好:)不过为了简单起见,我不会使用自调用匿名函数