這是很好的問題。 沒有一個簡單的答案,但是我有一個節點js應用程序和裏面我有一個客戶端文件夾,我克隆到Angular-webpack-starter中,它的工作原理完美。 我starcture是:
/client
/models
/node_module
/routes
/views
server.js
packages.json
路線裏面你應該把你所有的API端點。
server.js包含:
var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var index = require('./routes/index');
var api = require('./routes/api');
var test = require('./routes/api');
var users = require('./routes/users');
var expressValidator = require('express-validator');
var app = express();
var port = process.env.PORT || 3003;
var proto = process.env.PROTO || "http";
var host = process.env.HOST || "localhost";
//view engine
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.engine('html', require('ejs').renderFile);
//static
app.use(express.static(path.join(__dirname, 'client')));
//body parser and validator
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
app.use(expressValidator());
app.use(cookieParser());
app.use('/', index);
app.use('/api', api);
app.use('/users', users);
app.use('/test', test);
var server = app.listen(port, host, function(){
console.log('app listening at port:' + port);
});
和api.js是:
var express = require('express');
var router = express.Router();
var fs = require('fs');
var path = require('path');
router.get('/analytics', function(req, res) {
res.json({
'response':'1',
'body':'I just remember something, something important..."
});
});
module.exports = router;
幾個重要事項:
1.測試ENV你需要運行服務器( nodejs)和客戶端(角 - 使用webpack),所以爲了做到這一點,你需要在你的根目錄下運行npm start,在你的客戶端目錄下啓動npm。在這之後,2臺服務器在3000端口運行一臺服務器,3003端口服務器運行一臺服務器。因此,您只需在3000臺客戶機服務器(爲您配置的webpack)中查看您的應用。
2.如果你問自己,那麼如果你的服務器不在同一個端口(這是個好問題),你如何發送http到你的服務器 - 你需要做的就是使用webpack將你的請求代理到正確的地方,將此添加到webpack.dev.js:
devServer: {
port: METADATA.port,
host: METADATA.host,
historyApiFallback: true,
watchOptions: {
aggregateTimeout: 300,
poll: 1000
},
proxy: {
'/users/login': {
target: 'http://localhost:3003'
},
'/users/register': {
target: 'http://localhost:3003'
},
'/users/forgot-password': {
target: 'http://localhost:3003'
},
'/users/reset': {
target: 'http://localhost:3003'
},
'/users/confirm': {
target: 'http://localhost:3003'
},
'/api/getUserProfile': {
target: 'http://localhost:3003'
},
'/api/postEditableUserProfile': {
target: 'http://localhost:3003'
},
'/api/upload-avatar': {
target: 'http://localhost:3003'
},
'/api/analytics': {
target: 'http://localhost:3003'
},
'/api/contact': {
target: 'http://localhost:3003'
}
}
},