1

私はこの記事に沿ってフォローしています。この記事では、ルートをエクスプレスで整理するための良い方法について説明しています。main.jsファイルからエクスポートした関数にアクセスしようとすると問題が発生します。「localhost/user / username」をカールすると、404エラーが発生します

//the routes section of my my app.js file
app.get('/', routes.index);
app.get('/user/:username', routes.getUser);

//my index.js file
require('./main');
require('./users');

exports.index = function(req, res) {
    res.render('index', {title: 'Express'});
};

//my main.js file

exports.getUser = function(req, res){
        console.log('this is getUser');
        res.end();
};

----私のソリューションで編集----

これが私が行った解決策です、多分誰かがそれが役に立つと思うでしょう。また、これが将来問題を引き起こすかどうかについての提案を聞くこともできます。

//-------The routes in my app.js file now look like this.

require('./routes/index')(app);
require('./routes/main')(app);

//-------In index.js i now have this

module.exports = function(app) {
    app.get('/', function(req,res){
        res.render('index', {title: 'Express'});
    });
};

//-------My main.js now looks like this-------

module.exports = function(app){

    app.get('/user/:username', function(req, res){
            var crawlUser = require('../engine/crawlUser');
            var username = req.params.username;
            crawlUser(username);
            res.end();
    });

};
4

2 に答える 2

2

グローバルは悪であり、どんな犠牲を払っても避けるべきです。これが、グローバルなしで、過剰なボイラープレートコードなしでルートを整理する方法です。

// File Structure

/app.js
/routes
/--index.js
/--main.js
/--users.js

// app.js
var app = require('express');

/* Call Middleware here */

require('routes')(app);
app.listen(3000);

---------------------------------------------

// routes/index.js - This is where I store all my route definitions
// in a long list organized by comments. Allows you to only need to go to
// one place to edit route definitions. 

module.exports = function(app) {

  var main = require('./main');
  app.get('/', main.get);

  var users = require('./users');
  app.get('/users/:param', users.get);

  ...

}

---------------------------------------------

// routes/main.js - Then in each submodule you define each function and attach
// to exports

exports.get = function(req, res, next){
  // Do stuff here
})

最終的には好みの問題だと思いますが、コードで敏捷性を維持し、他のモジュールと連携させたい場合は、グローバル変数を避ける必要があります。アレックス・ヤングが大丈夫だと言っても。=)

于 2012-12-03T00:58:32.067 に答える
2

これが私が行った解決策です、多分誰かがそれが役に立つと思うでしょう。

//-------The routes in my app.js file now look like this.

require('./routes/index')(app);
require('./routes/main')(app);

//-------In index.js i now have this

module.exports = function(app) {
    app.get('/', function(req,res){
        res.render('index', {title: 'Express'});
    });
};

//-------My main.js now looks like this-------

module.exports = function(app){

    app.get('/user/:username', function(req, res){
            var crawlUser = require('../engine/crawlUser');
            var username = req.params.username;
            crawlUser(username);
            res.end();
    });

};
于 2012-12-07T06:37:20.083 に答える