1. ホーム
  2. javascript

[解決済み】TypeError: res.status は関数ではありません。

2022-02-04 16:05:12

質問

express api (nodejs)でimgurに画像をアップロードする関数を作っています。 プロミスを返す関数を呼び出すとエラーが発生します。

TypeError: res.status is not a function. at uploadpicture.then

これは私のコードです。 エラーが発生したところ。

  router.post('/upload', (req, res, next)=> { 
    var busboy = new Busboy({headers: req.headers});
    busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
        if(fieldname == 'image') {
            // the buffer
            file.fileRead = [];
            file.on('data', function(data) {
                // add to the buffer as data comes in
                this.fileRead.push(data);
            });

            file.on('end', function() {
                // create a new stream with our buffered data
                var finalBuffer = Buffer.concat(this.fileRead);
                upload = uploadpicture(finalBuffer).then((res)=>{ //success request
                  console.log(res);
                  res.status(200).json({success: true, message: "Successfully uploaded !", url: res.data.link});
                },(err)=>{ //error
                  res.status(500).json({success: false, message: "Error happenned while uploading !"});
                }).catch((error)=>{
                  console.log(error);
                  res.status(500).json({success: false, message: "Error happenned while uploading !"});
                });

            })
        }
    });
    busboy.on('finish', function() {
        //busboy finished
    });
    req.pipe(busboy);
});

そして、関数:

function uploadpicture(stream){ //get picture stream
    return new Promise((resolve, reject)=>{
    var options = {
      uri: 'https://api.imgur.com/3/image',
      method: 'POST',
      headers: {
          //'Authorization': 'Client-ID ' + config.client_id_imgur // put client id here
      },
      formData: {
          image: stream,
          type: 'file'
      },
      auth: {
        bearer: config.access_token_imgur,
      }
  };

  request(options)
      .then((parsedBody)=> {
          resolve(parsedBody);
      })
      .catch((err)=> {
        console.log(err);
        reject(err.toString())
      });
    });
  }

コードは完全に動作しますが、なぜ突然このエラーが発生したのかわかりません。 を試してみました。

矢印関数をfunction(){}に変更 ルートパラメーターの横に追加

何もうまくいきませんでした、ありがとうございました

解決方法は?

この時点で

upload = uploadpicture(finalBuffer).then((res)=>{ //success request

その res は、プロミスの結果 uploadpicture 関数(これは parsedBody ) ではなく res を急行ルートから削除しました。ですから、確かに status 関数を使用します。を変更してみてください。 then のようにコールバック名を指定します。

upload = uploadpicture(finalBuffer).then((otherName)=>{ //success request