javascript - 路线不适用于模块化结构

标签 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 时我收到这样的消息:

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/

相关文章:

javascript - 创建数组的副本并操作原始数组

javascript - Angular 检查重复输入

javascript - 正则表达式获取带空格的字符串

javascript - 将 eager.io json 集成到 highcharts js

javascript - 静音/踢 channel Web 应用程序 (ARI)

javascript - 检查 gitlab 项目中文件的更新

javascript - VS Typescript 找不到本地文件夹

node.js - 如何检查 AWS 开发工具包是否提供了凭据?

node.js - ExpressJS 和中间件中的域错误处理

node.js - 将 Auth0 集成到 Node & Express 应用程序中