2017-03-20 7 views
0

this tutorialの後にQ &のアプリを作成していますが、すべてうまくいっていますが、設定ファイル経由でアプリが提供されているベースルートを変更する機会を変更する必要があります。Expressアプリケーション - ベースURLを変更する

これで、アプリケーションはlocalhost:8080で提供され、localhost:8080/qae(たとえば)経由で提供する必要があります。

私は答えは、コードのこの部分の近くにあると思う:(/server/app.jsから)

// Setup server 
var app = express(); 
var server = http.createServer(app); 
var socketio = require('socket.io')(server, { 
    serveClient: config.env !== 'production', 
    path: '/socket.io-client' 
}); 
require('./config/socketio')(socketio); 
require('./config/express')(app); 
require('./routes')(app); 


// Start server 
function startServer() { 
    app.angularFullstack = server.listen(config.port, config.ip, function() { 
    console.log('Express server listening on %d, in %s mode '+config.ip, config.port, app.get('env')); 
    }); 
} 

setImmediate(startServer); 

しかし、私はそれを理解することはできません。これを簡単な方法で行うことは可能でしょうか?

////////

////////のEDITは、私はすべての提案された解決策を試してみましたが、私は何か間違ったことをやって、エラーを得ています。

/** 
* Main application routes 
*/ 

'use strict'; 

import errors from './components/errors'; 
import path from 'path'; 

export default function(app) { 
    // Insert routes below 
    app.use('/api/cpd', require('./api/cpd')); 
    app.use('/api/categories', require('./api/category')); 
    app.use('/api/terms', require('./api/term')); 
    app.use('/api/qae', require('./api/qae')); 
    app.use('/api/stats', require('./api/stat')); 
    app.use('/api/tags', require('./api/tag')); 
    app.use('/api/questions', require('./api/question')); 
    app.use('/api/things', require('./api/thing')); 
    app.use('/api/users', require('./api/user')); 

    app.use('/auth', require('./auth')); 

    app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
    }); 


    // All undefined asset or api routes should return a 404 
    app.route('/:url(api|auth|components|app|bower_components|assets)/*') 
    .get(errors[404]); 

    // All other routes should redirect to the index.html 
    app.route('/*') 
    .get((req, res) => { 
     res.sendFile(path.resolve(app.get('appPath') + '/index.html')); 
    }); 
} 

答えて

0

あなたがこれまであなたの発根を変更する必要があります:

app.use('/qae',require('./routes')) 

routes/index.jsで、あなたのルートのすべての宣言を持つことができますこれは、それが助け場合、私routes.jsです。 routes.js

export default function(app) { 
    // Insert routes below 
    app.use('/qae', require('./api')); 


    app.use('/auth', require('./auth')); 

    app.use(function(req, res, next) { 
     res.header("Access-Control-Allow-Origin", "*"); 
     res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
     next(); 
    }); 


    // All undefined asset or api routes should return a 404 
    app.route('/:url(api|auth|components|app|bower_components|assets)/*') 
    .get(errors[404]); 

    // All other routes should redirect to the index.html 
    app.route('/*') 
     .get((req, res) => { 
     res.sendFile(path.resolve(app.get('appPath') + '/index.html')); 
     }); 
} 

api方法すべてのAPIのルートが/qae/api/*次のようになります

const express = require('express') 
const router = express.Router() 

router.use('/api/cpd', require('./cpd')); 
router.use('/api/categories', require('./category')); 
router.use('/api/terms', require('./term')); 
router.use('/api/qae', require('./qae')); 
router.use('/api/stats', require('./stat')); 
router.use('/api/tags', require('./tag')); 
router.use('/api/questions', require('./question')); 
router.use('/api/things', require('./thing')); 
router.use('/api/users', require('./user')); 

module.exports = router 

でファイルindex.jsを作成します。この接頭辞の後にもauthが必要な場合は、同じ方法で行う必要があります。 ベストソリューションは、サブフォルダからのルータを含むapp.use('/',...)です。あなたの./routesモジュールではなくappオブジェクトを取るのルータを返された場合は、/ルートでそれを利用できるようにこれを行うことができます

+0

この作業を行うことはできませんでした。私はroutes.jsを変更する方法を知らない –

+0

答えを更新しました。それは動作するはずです。そのほぼ準備ができた解決策。 – Bonanza

+0

それは機能しましたが、アプリからすべてのAPIコールを変更する必要があります。ありがとうございました! –

0

app.use(require('./routes')); 

またはこれは/qae接頭辞を使用する:

app.use('/qae', require('./routes')); 

./routesによってエクスポートされた関数にappオブジェクトを渡すので、実際にルートを登録するのは./routesモジュールですコードを記述していないので、具体的な例が得られません。私はあなたが別のプレフィックスのために./routesのルート定義を変更する必要があり、上記の例が機能するためにはapp引数を取る代わりにルータを返す必要があるとしか言えません。

あなたは./routes次のようになりなければならないでしょうTthen

let express = require('express'); 
let router = express.Router(); 

router.get('/xxx', (req, res) => { 
    // ... 
}); 
router.get('/yyy', (req, res) => { 
    // ... 
}); 
module.exports = router; 

だけにしてあなたが使用できるようになります:メインコードで

app.use('/qae', require('./routes')); 

を。

+0

これを試しましたが、正しく適用する方法がわかりませんでした。私はroutes.jsを貼り付けました。 –

1

次の操作を行うことができます

var app = express(); 
var routes = require('./routes/index'); 
app.set('base', '/qae'); 

、あなたはこのことができます:)

+0

私はこれを試してこのエラーを受け取りました:/var/www/public/citizenpedia/node_modules/express/lib/router/index.js:458 新しいTypeErrorを投げる( 'Router.use()はミドルウェア機能が必要ですが、' + gettype(fn)); ^ –

+0

私はvarルートを編集しました。変更を加えてもう一度お試しください。 –

+0

別のエラー:エラー:Function.Module._resolveFilename(module.js:337:15)にモジュール './routes/index' が見つかりません。私はちょうどapp.jsを編集しています、それは正しいですか? –

0

フォルダ構造

bin/ 
    www 
server/ 
    routes/ 
    index.js 
    book.js 
    views/ 
    index.ejs 
    app.js 
    router.js 
    error.js 
public/ 
package.json 
をルート

app.use('/qae', routes); 

希望を追加する必要があります

app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: false})); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

require('./router')(app); 
require('./errors')(app); 


module.exports = app; 

route.js

var index = require('./routes/index'); 
var books = require('./routes/books'); 

var base = '/api'; 

module.exports = function (app) { 
    app.use(base+'/', index); 
    app.use(base+'/books', books); 
}; 

error.js

module.exports = function (app) { 
    app.use(function (req, res, next) { 
     var err = new Error('Not Found'); 
     err.status = 404; 
     next(err); 
    }); 

// development error handler 
// will print stacktrace 
    if (app.get('env') === 'development') { 
     app.use(function (err, req, res, next) { 
      res.status(err.status || 500); 
      res.render('error', { 
       message: err.message, 
       error: err 
      }); 
     }); 
    } 
// production error handler 
    app.use(function (err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('error', { 
      message: err.message, 
      error: {} 
     }); 
    }); 
}; 

index.js

var express = require('express'); 
var router = express.Router(); 

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

module.exports = router; 
関連する問題