cara menangbil data dari Form dengan Node.JS

Gan bagaimana ya mengambil data dari form dengan methode post dari file html dengan node.js? saya sudah menggunakan code yang tertera dibawah tapi ketika hasil value dari form ingin saya tampilkan ke jendela browser kok tidak bisa ya? tetapi ketika ditampilkan diconsole value dari form tersebut bisa ditampilan. kira kira bagaimana solusinya?

 //ini route JS
var fs = require('fs');
var url = require('url');
var query = require('querystring');

var link;
var nama = satus = "";

function fileRoute(namaFile, res){
    res.writeHead(200, {'Content-Type' : 'text/html'});
    fs.readFile(namaFile, function(no, yes){
        if(no){
            res.writeHead(404);
            res.write('File not found');
            res.write('')
        }
        else{
            res.write(yes);
        }

        res.end();
    });
}

function handleRequest(req, res){
    res.writeHead(200, {'Content-Type':'text/html'});
    link = url.parse(req.url);
    if(link.pathname == '/')[
        fileRoute('./index.html', res)
    ]
    else if(link.pathname == '/about'){
        fileRoute('./about.html', res)
    }
    else if(link.pathname == '/form'){
        fs.readFile('./form.html', function(no, yes){
            if(no){
                res.writeHead(404);
                res.write('File Not Found');
                data = query.parse(link.query);
            }
            else{
                var dataPost = "";
                if(req.method.toUpperCase() == 'POST'){
                    req.on('data', function(chunck){
                        dataPost += chunck;
                    });
                    req.on('end', function(){
                        res.write(JSON.stringify(dataPost)); //bagian errornya kayaknya sekitar sini,
//ketika saya disini menambahkan console.log maka data akan tampil, tapi ketika ingin
//ditampilkan di browser datanya tidak tampil

                    });

                    res.write('<br><a href="/">Back to index</a>')

                }
                else{
                    res.write(yes);
                }
            }
            res.end();
        })

    }
    else{
        fileRoute('null', res)
    }
}


module.exports.handle = handleRequest;



// ini servernya
var http = require('http');
var router = require('./ruter.js');

var server = http.createServer(router.handle);
server.listen(3000, function(){
    console.log('Server is running');
});

//ini file form pada htmlnya
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Pendaftaran</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <form method="POST">
            <label>Nama</label><input type="text" name="nama">
            <label>Status</label><input type="text" name="status" value="">
            <input type="submit" value="Submit">
        </form>
    </body>
</html>

avatar nurcahyaari
@nurcahyaari

34 Kontribusi 12 Poin

Diperbarui 6 tahun yang lalu

3 Jawaban:

Jawaban Terpilih


fs.readFile('./form.html', function(no, yes){
    if(no){
        res.writeHead(404);
        res.write('File Not Found');
        data = query.parse(link.query);
    }
    else{
        var dataPost = "";
        if(req.method.toUpperCase() == 'POST'){
            req.on('data', function(chunck){
                dataPost += chunck;
            });
            req.on('end', function(){
                res.write(JSON.stringify(dataPost));

            });

            res.write('<br><a href="/">Back to index</a>')

        }
        else{
            res.write(yes);
        }
    }
    res.end();//  <==== sebelum res.write() dan semua yang didalam if/else diatas dieksekusi, res.end() sudah lebih dahulu dieksekusi, jadi res.write() tidak bisa lagi

benerin deh posisi res.end, NodeJS kan sifatnya non-blocking, semoga membantu :D

avatar syahrizalakbar
@syahrizalakbar

4 Kontribusi 4 Poin

Dipost 7 tahun yang lalu

tambahan aja, selain karena posisi res.end yang salah, res.write pada 'dataPost' juga sebenernya tidak akan terkirim. lebih baik fungsi req.on('end') dihapus dan res.write ditaruh di fungsi req.on('data') dan langsung ditambahkan res.end disitu juga

req.on('data', function(chunck)
{
	dataPost += chunck;
	res.write(JSON.stringify(dataPost));
	res.write('<br><a href="/">Back to index</a>');
	res.end();
});

avatar rachmatsasongko
@rachmatsasongko

410 Kontribusi 426 Poin

Dipost 6 tahun yang lalu

Terimakasih sudah mau membantu, ternyata betul terdapat kesalahan pada penaruhan res.end() sudah saya edit dan ternyata sudah jalan :D

avatar nurcahyaari
@nurcahyaari

34 Kontribusi 12 Poin

Dipost 6 tahun yang lalu

Login untuk ikut Jawaban