我正在按照本教程构建一个问答应用程序,一切顺利,但我需要更改更改通过配置文件提供应用程序的基本根的机会。
现在,该应用程序在 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)
您可以执行以下操作:
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)
希望这可以帮助 :)
你应该将你的 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('/',...)包含子文件夹中的路由器。