13

angularjsとnodejsにMoto Advertsアプリケーションがあります。Angularjs-client-side は Apache HTTP サーバー (localhost:8000) で実行されていますが、nodejs-server-side は node.js http サーバー (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'));
});

私の質問は次のとおりです。

  1. 同じサーバーでクライアント側とサーバー側を実行するにはどうすればよいですか。a) Apache HTTP サーバー上 (localhost:8000)。b) (localhost:3000) 上の Node.js セルフ http サーバー。
  2. クライアント側とサーバー側の 2 つの独立したサーバー、または 1 つだけの、本番環境での使用に最適なアーキテクチャはどれですか?
  3. サーバー側でクロスオリジン リソース共有 (CORS) を使用することは良い方法ですか (2 つの独立したサーバーが必要な場合)?
  4. アドレスhttp://localhost:3000/api/brandsをサーバー側にハードコードしないようにするにはどうすればよいですか (ベスト プラクティス)?
4

3 に答える 3

13
  1. Node.js
  2. 1 つのサーバーの方が保守性が高くなります。最適化するために、必要に応じて後でnginxで静的ファイルをキャッシュできます。(「nginx Node.js static」を検索するだけですが、トラフィックが少なく、大量の静的ファイルがない場合は、それがなくても問題なく動作します)。私はApacheを何にも使用しません。

サンプルの 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;
  }
}
  1. CORS は必要ありません。
  2. ポートは同じなので問題ありません。
于 2015-09-26T08:33:09.707 に答える
6

同じサーバーでクライアント側とサーバー側を実行するにはどうすればよいですか。a) Apache HTTP サーバー上 (localhost:8000)。b) (localhost:3000) 上の Node.js セルフ http サーバー。

回答: nodejs を自己ホストとして実行する必要はありません。代わりに、Apache サーバーを介して nodejs を実行し、fusion パッセンジャーも使用します。fusion パッセンジャーは、ノード アプリケーションをバックグラウンドで永久に実行します。個人的には、nodejs アプリケーションには Nginx + fusion を好みます。

クライアント側とサーバー側の 2 つの独立したサーバー、または 1 つだけの、本番環境での使用に最適なアーキテクチャはどれですか?

回答: クライアント用とサーバー側用に 1 台の 2 台のサーバーを使用するという意味がわかりません。クライアントとサーバーのコードを単一のサーバーに保持します。

サーバー側でクロスオリジン リソース共有 (CORS) を使用することは良い方法ですか (2 つの独立したサーバーが必要な場合)?

回答 : サーバーとクライアントが同じドメインにある場合、CORS について心配する必要はありませんが、将来、API をクライアント アプリに公開する場合は、CORS 構成を行う必要があります。

アドレスhttp://localhost:3000/api/brandsをサーバー側にハードコードしないようにするにはどうすればよいですか (ベスト プラクティス)?

回答 : 定数を使用してベース パスを宣言し、API 呼び出しを行うサービスとファクトリで DI を実行します。

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
      }
    });
  }]);
于 2015-09-30T02:59:29.970 に答える