0

localhost:3000/#!/ でアプリを実行していて、Express で使用する URL パラメーターを取得しようとしていますが、うまくいきません。以下を含む新しいサーバー ルーティング ファイルを作成しました。

admin.server.routes.js

'use strict';

module.exports = function(app) {
    // Admin Routes
    var admin = require('../../app/controllers/admin.server.controller');

    // Both of these routes work fine.
    app.route('/admin/test').
        get(admin.populate).
        put(admin.update);

    // First attempt, didn't work.
    app.route('/admin/test').get(admin.doSomething);

    // Second attempt, didn't work.
    app.param('foo', admin.doSomething);

    // Third attempt, didn't work.
    app.param('foo', function(req, res) {
        console.log('Found foo!');
        return res.status(400).send();
    });

};

私の管理ページでは、admin.client.controller.js が読み込み時に $http.get リクエストを送信してデータを入力します。入力された値を更新するために $http.put リクエストを送信するボタンを含むフォームがあります。これらの要求は両方とも正常に機能します。

問題は、次のように foo パラメータを含む URL を使用してアプリにアクセスしようとしたときですhttp://localhost:3000/#!/admin/test?foo=bar。コードで上記の 3 つの試みをそれぞれ試しましたが (1 つずつ試すことができるように他のものをコメントアウトしています)、変数を取得できないようです。

私の admin.server.controller ファイルには、populate 関数と update 関数に加えて、次のコードがあります。

admin.server.controller

exports.doSomething = function(req, res) {
    console.log('Server - found foo!');
};

これらの努力のいずれも使用せずに、サーバー側で使用するために foo を「取得」したことを実際に証明することはできませんでした。私は何が欠けていますか?

4

2 に答える 2

2

あなたの

http://localhost:3000/#!/admin/test?foo=bar

すべてのハッシュバン URL は angularjs によって処理されます。これ/admin/test?foo=barはリクエストとは見なされません。リクエストにクエリ文字列を追加するには、angularjs リソースで次のようにします。

 function ($resource) {
     $resource('/admin/test').query({foo: 'bar'});
 }

これは次のように表現されます。http://localhost:3000/admin/test?foo=bar

あなたの問題は、主にクライアント側でリクエストを送信する方法に依存しています。

ちなみに、エクスプレス ルートでは、次のように foo 値を取得できます

クエリ文字列を取得してリクエストで使用する場合は、次を参照してください: JavaScript でクエリ文字列値を取得するにはどうすればよいですか?

于 2014-12-10T16:15:47.287 に答える