0

DELETEリクエストを受け入れるルートがありますが、Expressを使用すると追加できることを知っています

 <input type="hidden" name="_method" value="delete" />

POSTリクエストをURLに送信するフォームに送信します。

しかし、フォームの代わりにリンクを使用してこれをどのように行いますか?

4

1 に答える 1

1

これは、GETリクエストではサポートされていません。

methodOverride()チェックreq.body(POST引数)とリクエストヘッダーのみ-通常のリンクにはどちらも設定できません(ただし、GETを使用している場合でもAJAXリクエストにカスタムヘッダーを設定できます)。

これは、CSRFトークンを使用している場合でも大きな問題になる可能性があるため、理にかなっています。ブラウザがいつリンクをプリフェッチするかを知ることはできません。したがって、GETリクエストは、削除などのアクションを実行しないでください。

本当に必要で、欠点を気にしない場合は、カスタム関数を作成することを検討してください。

function methodOverrideGET(key) {
    key = key || "_method";
    return function methodOverrideGET(req, res, next) {
        if (req.originalMethod != req.method) {
            // already overridden => do not override again
            next();
            return;
        }

        req.originalMethod = req.method;
        if (req.query && key in req.query) {
            req.method = req.query[key].toUpperCase();
            delete req.query[key];
        }
        next();
    };
};

.use(methodOverrideGET) これで、後で クエリ文字列に.use(methodOverride)追加することができます。_method=DELETE

于 2012-05-24T05:40:36.827 に答える