2

これを読んでいるのであれば、Manuel Kiessling の Node チュートリアルに従っていることでしょう。チュートリアルのファイル アップロードの部分を完了すると、次のエラーが表示されました。

fs.rename(files.upload.path, "img/img.jpg", function(error) {
                              ^
TypeError: Cannot read property 'path' of undefined

私は周りを検索し、これこれを見つけましたが、それらはかなり決定的ではなく、ほとんど助けになりませんでした.

4

4 に答える 4

2

まず、チュートリアルがリクエストとレスポンスを間違った順序で渡しているのは事実です。最初にしたことは、順序を から(response, request)に変更したこと(request, response)です。(どこでもこれを行うようにしてください)。この理由は、の関数がこの順序でそれらを渡すと確信しているからonRequestです。HTTPcreateServer()

それをしたら、まだ同じエラーが発生しました。しかし、私のフォームからの情報をログに記録することによって

...
var form = new formidable.IncomingForm();
console.log("About to parse...");
form.parse(request, function(error, fields, files) {

    console.log("Parsing done.");
    console.dir(request.headers);
    console.log(fields);
    console.log(files);
...

fieldsキーに探していたものが含まれていて、filesキーが空であることに気付きました。

{ upload: '2015-03-08 14.54.06.jpg', 'Upload File': 'Submit' }
{}

ここから、 を使用できることは明らかですfields.upload。これを使用すると、それが文字列ではないという別のエラーが返されました(または、少なくとも手ごわい人が受け入れるものではありませんでした)。toString()どちらもうまくいかないようだったので、別の変換を使用しました:

fs.rename(fields.upload + "", "img/img.jpg", function(error) {
    ...
}

これは理想的ではありませんが、うまくいきました。

これは と で行われましnode@0.10.35formidable@1.0.17。私の解決策がすべての人に役立つかどうかはわかりませんが、うまくいけば、正しい方向に向けることができます. この不一致は、チュートリアルで古いバージョンの node と formidable を使用したことが原因である可能性があります。

于 2015-03-09T23:21:15.513 に答える
0

fs.rename が使用しようとしていた入力フィールドの名前が異なっていたため、同じエラーが発生しました。

基本的に、この行の名前を確認してください。

'<input type="file" name="UPLOADEDIMAGE">'+

次の 2 行と同じです。

fs.rename(files.UPLOADEDIMAGE.path, "/tmp/test.png", function(err) {

fs.rename(files.UPLOADEDIMAGE.path, "/tmp/test.png");
于 2016-12-30T18:25:52.310 に答える