不在模块化结构中工作的路由

时间:2015-09-12 21:58:21

标签: javascript node.js express

我的平均应用程序有这些结构,但现在让我们专注于快速路由,这是我的结构:

├── 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'

我缺少什么?

1 个答案:

答案 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' ) );

很高兴你找到了解决办法:)