luk*_*paw 13 node.js angularjs
我在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
}
});
}]);
Run Code Online (Sandbox Code Playgroud)
一块服务器端代码(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'));
});
Run Code Online (Sandbox Code Playgroud)
我的问题是:
Jas*_*say 13
这是一个示例nginx配置:
server {
listen 80;
server_name myserver.net;
root /mnt/app;
index index.html index.htm;
location /static/ {
try_files $uri $uri/ =404;
}
location /api/ {
proxy_pass http://127.0.0.1:8080;
}
}
Run Code Online (Sandbox Code Playgroud)
yaz*_*aki 12
我相信这是apache nodejs angularjs最流行的架构.
我建议您通过nodejs服务器提供所有文件,包括静态文件,就像我在图中所写的那样.另一方面,您可以仅将节点服务器用于动态内容,并根据需要使用apache来提供包括客户端代码在内的静态文件.但是如果你这样做,即使你开发应用程序,也需要apache服务器.我觉得这很麻烦.
您可以通过在public
目录中查找其他静态文件来提供客户端代码.如果您决定从nodejs服务器提供所有文件,则可以在不使用apache的情况下进行开发,并避免在代码中编写特定的端口号.我认为您的应用程序代码不应该关注您将使用的端口号.
我希望这可以解答你的所有问题.
我应该怎么做在同一台服务器上运行客户端和服务器端.a)在Apache HTTP Server上(localhost:8000).b)在Node.js上的自身http服务器上(localhost:3000).
Ans: 你不需要运行nodejs作为self hosted.instead通过Apache服务器运行nodejs并使用fusion passenger.fusion passenger将永远负责在后台运行您的节点应用程序.我个人更喜欢Nginx + fusion用于我的nodejs应用程序.
哪种架构最适合生产使用 - 两个独立的服务器用于客户端和服务器端,或者只有一个?
Ans: 我不明白你的意思是两个服务器一个用于客户端,一个用于服务器端.将客户端和服务器代码保存在单个服务器上.
在服务器端使用跨源资源共享(CORS)是不错的做法(如果我应该有两个独立的服务器)?
Ans: 如果您的服务器和客户端在同一个域下,那么您不必担心CORS,但如果将来您想要将API公开给任何客户端应用程序,那么您将需要进行CORS配置.
我应该做些什么来不用硬编码地址http:// localhost:3000/api/brands到服务器端(最佳实践)?
Ans: 我使用常量声明我的基本路径,然后在我的服务和工厂中进行API调用.
motoAdsServices.constant("API", {
"endpoint": "http://localhost:8080",
})
motoAdsServices.factory('Brand', ['$resource','API', function($resource,API) {
return $resource(API.endpoint + '/api/:id', {}, {
query: {
method: 'GET',
params: {
id: 'brands'
},
isArray: true
}
});
}]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8224 次 |
最近记录: |