2016-05-11 10 views
0

Express 3.0とexpress-subdomainを使用して既存のノードアプリケーションにサブドメインを追加しようとしています。エクスプレスサブドメインと別のルートファイルを参照する際に問題があります

(私は私のhostsファイルにサブドメインを追加しましたし、それが正常に動作しています。)

現在のアプリはメインファイルと同じディレクトリにある別のroutes.jsファイル内のすべてのルートを持っており、それはですこのように呼ばれる:

var routes = require("./routes") 
//other stuff 
routes.routeList(app); 

私は

app.use(subdomain('test-developer', [router])); 

構文を使用するさまざまな方法の束を試みたと私はそれを把握することはできません。

私は

var router = require("./routes.js"); 
app.use(subdomain('test-developer', router)); 

を試みたし、私のようなエラーが出る "2番目のパラメータは、FN(reqは、RES、次)のparamsを扱う関数でなければなりません。"

は、ここでは、コードのいくつかのより多くのです:

//the developerRoutes.js file 
var express = require('express'); 

exports.developerRouteList = function(app) { 

var devRouter = express.Router(); 

devRouter.get('/', function(req, res) { 
    res.send('hi!'); 
}); 

} 

とmain.jsファイルから:

var developerRoutes = require('./developerRoutes'); 
//... 
var app = express(); 
app.use(subdomain('test-developer', developerRoutes.developerRouteList)); 
//force https with this: 
app.enable('trust proxy'); 

app.configure(function() { 

    app.use(function (req, res, next){ 
    var hostname = (req.headers.host.match(/:/g)) ? req.headers.host.slice(0, req.headers.host.indexOf(":")) : req.headers.host 
    console.log(hostname) 
    if ((hostname === 'localhost') || (hostname === 'test-developer.localhost') || req.secure) { 
     // request was via https, so do no special handling 
     next(); 
    } else { 
     // request was via http, so redirect to https 
     res.redirect('https://' + req.headers.host + req.url); 
    } 
}); 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser('secret')); 
    app.use(function(req, res, next){ 
    session = require("./routes/includes/session.js"); 
    next(); 
    }); 
    app.use(express.static('./public')); 


    app.use(app.router); 
}); 

app.engine('ejs', engine); 
app.set('views',__dirname + '/views'); 
app.set('view engine', 'ejs'); 
multiLess.configure(__dirname + '/static/less/', parentDirectory + 'public/css/',['main.less'],0); 

routes.routeList(app); 

これを整理する方法上の任意のアイデア?

+0

routes.jsファイルから何かを投稿できますか?それは輸出または返品と同様ですか? –

+0

確かに - それは "exports.routeList"をエクスポートし、ルートによって参照される別々のjsファイルを必要とします。 ( "app.get( '/'、datafree.home);"これは "datafree.js"を必要とします) – esperluette

+0

'exports.routeList'は' express.Router'のインスタンスですか?エクスプレスサブドメイン文書に基づいていますサブドメイン( 'test-developer '、のインスタンス)' –

答えて

1

あなたの投稿コードに基づいて、私は、次の手順を試します:

developerRoutes.js
  1. exports.developerRouteList = function(app)module.exports = devRouterであるべきであり、それはvar devRouter = express.Router()た後でなければなりません。 developerRoutes.jsに複数のルータを置いていない限り、module.exportsオブジェクトの中にdeveloperRouteListという名前のサブオブジェクトを作成する必要はありません。また、あなたがdeveloperRoutes.jsに渡すappインスタンスを使用しているようには見えないので、これを変更してください。
  2. main.jsでは、今、あなたは私が以前の問題で、この質問に答えてきた特急 - サブドメイン

    app.use(subdomain('test-developer', developerRoutes));

+0

ありがとうございます!この構文はExpress 4.xのみで動作すると思います...このアプリケーションはまだExpress 3.4です。サブドメイン作業が行われる前に移行する必要があります。楽しい!) – esperluette

関連する問題