【发布时间】:2013-11-27 21:17:21
【问题描述】:
我在 angularjs 和 nodejs 中有 Moto Adverts 应用程序。 Angularjs-client-side 在 Apache HTTP Server (localhost:8000) 上运行,但 nodejs-server-side 作为 node.js http server (localhost:3000) 运行。
一段客户端代码(angularjs):
var motoAdsServices = angular.module('motoAdsServices', ['ngResource']);
motoAdsServices.factory('Brand', ['$resource', function($resource) {
return $resource('http://localhost\\:3000/api/:id', {}, {
query: {
method: 'GET',
params: {
id: 'brands'
},
isArray: true
}
});
}]);
一段服务器端代码(nodejs):
var express = require('express');
var path = require('path');
var http = require('http');
var brands = require('./routes/brands');
var app = express();
var allowCrossDomain = function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
};
app.configure(function() {
app.set('port', process.env.PORT || 3000);
app.use(express.logger('dev')); /* 'default', 'short', 'tiny', 'dev' */
app.use(express.bodyParser()),
app.use(allowCrossDomain);
app.use(express.static(path.join(__dirname, 'public')));
});
app.get('/api/brands', brands.findAll);
http.createServer(app).listen(app.get('port'), function() {
console.log("Express server listening on port " + app.get('port'));
});
我的问题是:
- 如何在同一台服务器上运行客户端和服务器端。 a) 在 Apache HTTP 服务器 (localhost:8000) 上。 b) 在 (localhost:3000) 上的 Node.js 自我 http 服务器上。
- 哪种架构最适合生产使用 - 两个独立的服务器用于客户端和服务器端,还是只有一个?
- 在服务器端使用跨域资源共享 (CORS) 是否是一种好习惯(如果我应该有两个独立的服务器)?
- 我应该怎么做才能不将 http://localhost:3000/api/brands 硬编码到服务器端(最佳实践)?
【问题讨论】:
-
在进行 ajax 调用时要注意跨域问题。以后最好设计一个瘦代理来将ajax请求路由到你的服务器端。
-
我会在 Node.js 的 3000 端口上托管(客户端和服务器代码),并通过 Apache 在端口 80 上代理它们。然后您可以要求 Apache 缓存您的静态资产(如客户端 JS 和CSS ),这样你就可以两全其美。
-
@sza 你说的瘦代理是什么意思?
-
@lukpaw 一个轻量级服务器端逻辑放在每个客户端的同一主机上,用于路由请求。
-
@Hector Correa 如何在 Node.js 中同时托管两者?扩展我的服务器端代码以服务客户端?将 web-server.js 写入服务器所有内容?你知道一些关于它的模式或文章吗?