Express 应用程序 - 更改基本 url

Enr*_*anz 8 node.js express

我正在按照本教程构建一个问答应用程序,一切顺利,但我需要更改更改通过配置文件提供应用程序的基本根的机会。

现在,该应用程序在 localhost:8080 中提供服务,而我需要通过 localhost:8080/qae 提供服务(例如)。

我认为答案就在这段代码附近:

// 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);
Run Code Online (Sandbox Code Playgroud)

(来自/server/app.js)

但我想不通。是否可以通过简单的方式做到这一点?

////////编辑////////

我尝试了所有建议的解决方案,但我做错了一些事情并出现了错误。这是我的routes.js,以防有帮助:

/**
 * 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'));
    });
}
Run Code Online (Sandbox Code Playgroud)

AKS*_*AIN 6

您可以执行以下操作:

var app = express();
var routes = require('./routes/index');   
app.set('base', '/qae');
Run Code Online (Sandbox Code Playgroud)

那么你需要添加路线

app.use('/qae', routes);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)


Bon*_*nza 4

你应该将你的 root 更改为:

app.use('/qae',require('./routes'))
Run Code Online (Sandbox Code Playgroud)

并在routes/index.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'));
      });
}
Run Code Online (Sandbox Code Playgroud)

index.js在中创建文件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
Run Code Online (Sandbox Code Playgroud)

这样你所有的 api 路由都会看起来像/qae/api/*. 如果您auth还需要在此前缀之后,则需要以相同的方式执行此操作。最好的解决方案是让我app.use('/',...)包含子文件夹中的路由器。