2017-09-18 1 views
1

私はこの同じ質問に対して多くの答えを見ましたが、まだ実用的な解決策が見つかりませんでした。私はexpressとmulterを使用してファイルをアップロードできるWebアプリケーションを作成しようとしています。ファイルがアップロードされていないという問題があり、req.fileは常に定義されていません。Node.js TypeError:未定義のプロパティ 'path'を読み取ることができません

Expressおよびなどmulterバージョン:

var tempPath = req.file.path, 
     ext = path.extname(req.file.name).toLowerCase(), 
     targetPath = path.resolve('./public/upload/' + imgUrl + ext); 

     if (ext === '.png' || ext === '.jpg' || ext === '.jpeg' || ext === '.gif') { 
      fs.rename(tempPath, targetPath, function(err) { 
       if (err) throw err; 

       res.redirect('/images/' + imgUrl); 
      }); 
     } else { 
      fs.unlink(tempPath, function() { 
       if (err) throw err; 

       res.json(500, {error: 'Only image files are allowed.'}); 
      }); 
     } 

フォームは次のようになります:

multer = require('multer'); 

module.exports = function(app) { 
app.use(morgan('dev')); 
app.use(multer({ 
    dest: path.join(__dirname, 'public/upload/temp')}).single('file')); 
routes(app); 
app.use('/public/', express.static(path.join(__dirname, '../public'))); 

消費のコードは次のようになります。 "express": "^4.15.4", "multer": "^1.3.0"

私configure.jsが、この見えます

<form method="post" action="/images" enctype="multipart/form- 
data"> 
<div class="panel-body form-horizontal"> 
    <div class="form-group col-md-12"> 
     <label class="col-sm-2 control-label" 
     for="file">Browse:</label> 
     <div class="col-md-10"> 
      <input class="form-control" type="file" 
      name="file" id="file"> 
     </div> 
    </div> 

答えて

0

私はそれはあなたがオブジェクトのプロパティとして「パス」を求めるだけの時間ですので、あなたのエラーメッセージがこの行に

var tempPath = req.file.path, 

ある賭けます。あなたの問題はかなり明白です。要求にファイルがありません(「req」と呼ばれるオブジェクト)。 リクエスト内にファイルがあることを確認するには、使用しているコードでreqというオブジェクトを記録または検査する必要があります。

+0

はい、ファイルが定義されていません。私がここで紛失しているものを提案できますか? – hemanik

+0

次の操作を試してください。 console.log(JSON.stringify(req)) 次にオブジェクトを確認してください。 私は何が間違っているかを伝えるのに十分ではありませんでしたが、もし私が属性の名前をチェックするとしたら(あなたがタイプミスをしたり、探している属性がそうでないかもしれません)、console.log収集/送信/受信されるものが本当にあなたが思うものであることを保証します。それでも見つからない場合は、コードをデバッグできるように、実際の(私は実行可能ファイルを意味します))サンプルをアップロードしてください。 –

+0

コードはhttps://github.com/hemanik/imgPloadrです。 これは、この[書籍](https://github.com/twang281314/frontEnd/blob/master/book/Web%20Development%20with%20MongoDB%20and%20NodeJS%2C%202nd%20Edition.pdf)の例です。 – hemanik

関連する問題