web-dev-qa-db-ja.com

Webpack nodejs fs.readFileは関数ではありません

私は次のようなwebpack設定を持っています:

_var path = require('path')

module.exports = {
    entry: "./index.js",
    output: {
        path: path.join(__dirname, 'static'),
        filename:'bundle.js'
    },
    module: {
        loaders: [
            { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader"},
            { test: /\.json$/, loader: 'json-loader' },
        ]
    },
    node: {
      fs: "empty"
    }
};
_

fsを使用してファイルを読みたい

私は次のようなことをしています:

_var fs = require('fs')
console.log(fs)

fs.readFile('input.txt', function (err, buffer) {
        console.log("buffer")
        console.log(buffer)


    })
_

ここでファイルを読みたいだけですが、これを行うと、次のエラーが表示されます。

_fs.readFile_は関数ではありません

_npm install --save fs_を使用してfsをインストールしました

また、fsを出力すると、空のオブジェクトが表示されます。上記でconsole.log(fs)を実行しましたが、空のオブジェクトを取得しています

ここで何が問題になっていますか?

18
gamer

コードは正常に見えます!したがって、コードに問題はありません。クロス検証するには、ここで同じコードを実行してみてください https://www.tutorialspoint.com/execute_nodejs_online.php とすると、console.log(fs);が空白にならないことがわかります。

したがって、コードにエラーが表示されるのは、コマンド_npm install --save fs_を使用して「fs」という名前のノードモジュールをインストールしたためです。 Nodeは、このモジュールがデフォルトで表示されます。必要なのは、const fs = require('fs');を使用することだけです(varを使用するか、letも検索されますが、ここでconstをお勧めします)。

したがって、ローカルの_node_modules_フォルダーを削除してから、必要な他のモジュールをインストールしてこのコードを再度実行すると、問題なく実行されます。

お役に立てれば :)

1
Viraj Shelke

私が述べたコメントを信じているように、

node: { fs: "empty" }

削除する必要があります。さらに、すべてのコードはサーバー上で実行する必要があります。このようなファイルをブラウザーで読み取ることはできません。 Node APIはサーバー側のみであるため、エクスプレスまたは類似のライブラリを使用してAPIを構築する必要があります。

    router.get('/file/read', (req, res, next) => { fs.readFile('input.txt', function (err, buffer) {
            console.log("buffer")
            res.send(buffer);
        }) 
    })

次に、ブラウザでAJAXを使用してAPIを呼び出し、ファイルの内容を取得する必要があります。

任意のファイルを読み取るにはOBVIOUS SECURITY ISSUESがあります。ユーザーが好きなファイルをAPIに読み取らせないでください。ここでは、入力を制限し、使用可能なファイルのセットを制限するように、非常に注意する必要があります。

0
Brenn