105

私の node.js アプリは、express/examples/mvcアプリのようにモデル化されています。

コントローラーのアクションで、カスタムの http メッセージで HTTP 400 ステータスを吐き出したいです。デフォルトでは、http ステータス メッセージは「Bad Request」です。

HTTP/1.1 400 Bad Request

でも送りたい

HTTP/1.1 400 Current password does not match

さまざまな方法を試しましたが、いずれも http ステータス メッセージをカスタム メッセージに設定しませんでした。

私の現在のソリューションコントローラー関数は次のようになります。

exports.check = function( req, res) {
  if( req.param( 'val')!=='testme') {
    res.writeHead( 400, 'Current password does not match', {'content-type' : 'text/plain'});
    res.end( 'Current value does not match');

    return;
  } 
  // ...
}

すべて正常に動作しますが、正しい方法ではないようです。

express を使用して http ステータス メッセージを設定するより良い方法はありますか?

4

9 に答える 9

74

詳細については、このres.send(400, 'Current password does not match') Look Express 3.x ドキュメントを確認してください。

Expressjs 4.x の更新

この方法を使用します ( express 4.x docsを参照):

res.status(400).send('Current password does not match');
// or
res.status(400);
res.send('Current password does not match');
于 2013-01-04T11:47:43.527 に答える
13

こんな感じで使えます

return res.status(400).json({'error':'User already exists.'});
于 2016-05-07T19:18:18.520 に答える
13

Express でこのようなカスタム エラーを処理するエレガントな方法の 1 つは、次のとおりです。

function errorHandler(err, req, res, next) {
  var code = err.code;
  var message = err.message;
  res.writeHead(code, message, {'content-type' : 'text/plain'});
  res.end(message);
}

(これには、express の組み込みのexpress.errorHandlerを使用することもできます)

次に、ミドルウェアで、ルートの前に:

app.use(errorHandler);

次に、「現在のパスワードが一致しません」というエラーを作成する場所:

function checkPassword(req, res, next) {
  // check password, fails:
  var err = new Error('Current password does not match');
  err.code = 400;
  // forward control on to the next registered error handler:
  return next(err);
}
于 2013-01-05T17:38:10.010 に答える
11

サーバー側 (Express ミドルウェア):

if(err) return res.status(500).end('User already exists.');

クライアント側で処理

角度:-

$http().....
.error(function(data, status) {
  console.error('Repos error', status, data);//"Repos error" 500 "User already exists."
});

jQuery:-

$.ajax({
    type: "post",
    url: url,
    success: function (data, text) {
    },
    error: function (request, status, error) {
        alert(request.responseText);
    }
});
于 2016-03-29T11:23:21.197 に答える