2017-03-01 10 views
1

Node.jsを実行しているサーバーがあります。私はHTMLページ( "index.html")からフォームデータを読み、そのデータをtxtファイルに書き込む必要があります。Node.jsを実行しているサーバーにファイルを保存する方法は?

これは私のindex.htmlです:

<form action="/uploads" method="post"> 
    <table> 
     <tr> 
     <td><img src="images/ktulogo.png" width="100" height="100"></td> 
     <td> 
      <h3>Karadeniz Teknik Üniversitesi Bilgisayar Mühendisliği Bölümü</h3> 
     </td> 
     </tr> 
     <tr> 
     <td><br></td> 
     <td> 
      <hr> 
     </td> 
     </tr> 
     <tr> 
     <td> 
      <h4>Adınız Soyadınız :</h4> 
     </td> 
     <td><input type="text" style="margin-left: 5%; width: 40%"></td> 
     </tr> 
     <tr> 
     <td> 
      <h4>Öğrenci Numaranız :</h4> 
     </td> 
     <td><input name="ogrNo" type="text" style="margin-left: 5%; width: 40%"></td> 
     </tr> 
     <tr> 
     <td> 
      <h4>Cevabınız :</h4> 
     </td> 
     <td><textarea name="answer" datatype="text" rows="10" cols="100" style="margin-left: 5%; resize: none"></textarea></td> 
     </tr> 
    </table> 
    </br> 
    <center> 
     <button id="saveFile" class="btn btn-success" style="width: 30%">Sisteme Yükle</button> 
    </center> 
</form> 

そして、ここでは私のapp.jsです:

var express = require('express'); 
var app = express(); 
var path = require('path'); 
var fs = require('fs'); 

app.use(express.static(path.join(__dirname, 'public'))); 

app.get('/', function(req, res){ 
    res.sendFile(path.join(__dirname, 'views/index.html')); 
}); 

app.post('/uploads', function (req, res) { 
    var file_name = req.body.ogrNo; 
    var file_content = req.body.answer; 
    file_content = file_content.replace(/\n/g, "\r\n"); 

    var stream = fs.createWriteStream(file_name+".txt"); 
    stream.once('open', function() { 
     stream.write(file_content); 
     stream.end(); 
    }); 
}); 

var server = app.listen(3000, function(){ 
    console.log('Server listening on port 3000'); 
}); 

そして、私はこれを実行すると、それは私にエラーをスロー:

TypeError: Cannot read property 'ogrNo' of undefined at c:\Users\Volkan\IdeaProjects\File Upload\app.js:13:27 at Layer.handle [as handle_request] (c:\Users\Volkan\IdeaProjects\File Upload\node_modules\express\lib\router\layer.js:95:5) at next (c:\Users\Volkan\IdeaProjects\File Upload\node_modules\express\lib\router\route.js:131:13) at Route.dispatch (c:\Users\Volkan\IdeaProjects\File Upload\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (c:\Users\Volkan\IdeaProjects\File Upload\node_modules\express\lib\router\layer.js:95:5) at c:\Users\Volkan\IdeaProjects\File Upload\node_modules\express\lib\router\index.js:277:22 at Function.process_params (c:\Users\Volkan\IdeaProjects\File Upload\node_modules\express\lib\router\index.js:330:12) at next (c:\Users\Volkan\IdeaProjects\File Upload\node_modules\express\lib\router\index.js:271:10) at serveStatic (c:\Users\Volkan\IdeaProjects\File Upload\node_modules\serve-static\index.js:75:16) at Layer.handle [as handle_request] (c:\Users\Volkan\IdeaProjects\File Upload\node_modules\express\lib\router\layer.js:95:5)

私の問題の原因は何ですか?また、私はこの仕事をどのように処理できますか?

+0

リクエストを確認してください。 – Sikorski

+1

本文は未定義です。 You'r missing https://github.com/expressjs/body-parser –

+0

私はそれを扱います!あなたは正しい@BorisCharpentier、ありがとう! – vakkaya

答えて

2

あなたが

var bodyParser = require('body-parser') 

はパーサ

// parse application/x-www-form-urlencoded 
app.use(bodyParser.urlencoded({ extended: true })); 

// parse application/json 
app.use(bodyParser.json()); 
を追加し、その目的のためにその後

npm i -S body-parser 

それをインストールbody-parser

まず使用してコードにそれをインポートし、入ってくるデータを解析する必要が

それだけです。

+0

問題が解決しました!お返事おかげで。 – vakkaya

+0

あなたは大歓迎です:) –

+0

おそらく2017年にはvarよりconstを使う方が良いでしょう。そうでないかもしれない。何か案が ? –

関連する問題