2016-05-26 3 views
0

私は現在維持していますが、別の開発者によって書かれたsails.jsアプリケーションを持っています。私は帆に堪能ではなく、ファイルアップロードを実装するのが難しいです。カスタムミドルウェアでSails.js(0.10.5)ファイルをアップロード

一般に、帆はスキッパーによるファイルアップロードを処理し、アップロードAPIはスキッパーを通じて利用できることを理解します。さらに、私は新しいベアボーン・アプリケーションを作成しました。その中には、ドキュメントで使用可能な例に従ってファイルアップロードを行うことができます。

私の完全なアプリケーションでは、HTTP設定でいくつかのカスタマイズがあります。私のコントローラでは、req.fileundefinedfilesのように)です。

また、フルアプリとテストアプリのconfig/http.jsを比較すると、構造が異なります。 AFAIKは、リアルアプリとテストアプリの両方が0.10.5です(しかし、私のコンピュータでは、グローバルセイルは0.12.xですが、新しいアプリフォルダでは0.10.5の帆が見えますが、0.10.5フォルダから作成するスクリプトを実行しました) 。

少し読んだところ、正しく設定されていないか、または上書きがミドルウェアチェーンのスキッパーを省略しているようです。これは互換性のない設定ファイルの問題かもしれません。実際のアプリの初期バージョンは以前のバージョンのセイルで開発されました。

/** 
* Configure advanced options for the Express server inside of Sails. 
*/ 
module.exports.http = { 
    bodyParser: function() { 
     return require('body-parser')({limit: '900mb'}); 
    }, 
    customMiddleware: function(app) { 

     var bodyParser = require('body-parser'); 
     var expressJwt = require('../libs/express-jwt'); 
     var experssJwtConfig = require('./jwt.js').jwt; 

     app.use(function(req, res, next) { 
      res.setHeader("Access-Control-Allow-Origin", "*"); 
      next(); 
     }); 

     app.use('/api', expressJwt({secret: experssJwtConfig.secret})); 

     app.use(bodyParser.json()); 
     app.use(bodyParser.urlencoded()); 


     if(process.env.NODE_ENV == 'development') { 
      // just for local/development - serve static files 
      var express = require('express'); 
      app.use('/custom1', express.static('D:/Temp/custom1/')); 
      app.use('', express.static(process.cwd() + '/assets/')); 
     } 

    } 
}; 

/** 
* HTTP Flat-File Cache 
*/ 
module.exports.cache = { 
    // The number of seconds to cache files being served from disk 
    // (only works in production mode) 
    maxAge: 31557600000 
}; 

何が頭に浮かぶ:

私の完全なアプリで設定/ http.jsの内容は次のとおり?デバッグして、要求オブジェクト内にfile関数がない理由を確認する方法はありますか?たぶん私は何とか設定ファイルを更新/アップグレードする必要がありますか?

答えて

0

これは簡単なことです。セイル(バージョン10前後)は、ボディパーサーとしてスキッパーを使用しています。 Skipperには、ファイルをアップロードするために必要な機能が含まれています。上記では、bodyParserを指定するとこれがオーバーライドされるため、file関数やその他のビルトインスキッパー機能が得られません。

は、今私は(その上の任意のコメント?)...ファイルのアップロードを容易にするために、または追加のミドルウェアが含まれる(必ず何もブレークを作るために、いくつかの徹底的なテストが必要になります)スキッパーを使用してに戻ってどちらか持って

+0

はい、ボディパーサーとしてカスタムミドルウェアを使用すると、スキッパーの設定だけでなく、他のミドルウェアのすべてのセイルが内部的に使用されます。私は、あなたがアプリケーションと結合されてゆっくりと依存関係として帆を残してアプリ全体を再実行するので、帆のデフォルトを維持することをお勧めします。 – drinchev

+0

@drinchev - コメントをいただきありがとうございます。私はあなたに従っているかどうかはわかりません。 「アプリをやり直して帆を出す」とはどういう意味ですか?あなたはそれを使用を停止することをお勧めしますか? –

+0

もう一つの一般的な質問:sails.jsで - 私がskippperを使っているのなら、 'app.use(bodyParser.json());'と 'app.use(bodyParser.urlencoded());'をカスタムミドルウェア、またはそれは重複していて省略することができますか? –

関連する問題