2013-03-22 8 views
33

to przykład postać w HTML:node.js - Jak przesłać dane z html wyrazić

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<title>CSS3 Contact Form</title> 
</head> 
<body> 
<div id="contact"> 
    <h1>Send an email</h1> 
    <form action="/myaction" method="post"> 
     <fieldset> 
      <label for="name">Name:</label> 
      <input type="text" id="name" name="name" placeholder="Enter your full name" /> 

      <label for="email">Email:</label> 
      <input type="email" id="email" placeholder="Enter your email address" /> 

      <label for="message">Message:</label> 
      <textarea id="message" placeholder="What's on your mind?"></textarea> 

      <input type="submit" value="Send message" /> 

     </fieldset> 
    </form> 
</div> 
</body> 
</html> 

a to node.js funkcja, która działa na serwerze:

var sys = require('sys'), 
    http = require('http'); 
    http.createServer(function (req, res) { 
      switch (req.url) 
       case '/myaction': 
         res.end(?????); 
        break; 
      } 
    }).listen(8080); 
sys.puts('Server running at http://127.0.0.1:8080/'); 

I mają 2 pytania:

  1. Jak mogę wywołać funkcję myaction w pliku node.js ze strony html? Ponieważ plik html działa na porcie 80 i node.js na 8080 (gdy próbuję przenieść plik node.js do portu 80, zapisuje "// Nieobsługiwane" zdarzenie "błędu")
  2. W funkcji node.js, gdzie I położyć "?????" jak mogę uzyskać dane z formularza html. Po wpisaniu req.html.body.name nie uzyskać dane ...
+1

Czy myślałeś o użyciu ekspresu? Ma wbudowany moduł obsługi formularzy. Używam go z dużymi sukcesami, publikując formularze. –

Odpowiedz

78

Korzystanie http.createServer jest bardzo niskim poziomie i naprawdę nie przydatne do tworzenia aplikacji internetowych, jak jest.

Dobrym środowiskiem do wykorzystania jest Express, a proponuję go z powodzeniem użyć. Można go zainstalować, używając npm install express.

Kiedy trzeba, można utworzyć podstawowych aplikacji do obsługi postać:

var express = require('express'); 
var bodyParser = require('body-parser'); 
var app  = express(); 

//Note that in version 4 of express, express.bodyParser() was 
//deprecated in favor of a separate 'body-parser' module. 
app.use(bodyParser.urlencoded({ extended: true })); 

//app.use(express.bodyParser()); 

app.post('/myaction', function(req, res) { 
    res.send('You sent the name "' + req.body.name + '".'); 
}); 

app.listen(8080, function() { 
    console.log('Server running at http://127.0.0.1:8080/'); 
}); 

można uczynić swój punkt formularz do niego przy użyciu:

<form action="http://127.0.0.1:8080/myaction" method="post"> 

Powodem można” t uruchom węzeł na porcie 80, ponieważ jest już uruchomiony proces na tym porcie (który obsługuje twój index.html). Możesz użyć Express, aby również wyświetlać zawartość statyczną, taką jak index.html, używając oprogramowania pośredniego express.static.

+1

Błąd podczas kompilacji, np. "Błąd: nie można ustawić nagłówków po ich wysłaniu ..." – vineet

+4

@chotesah, który nie jest powiązany z kodem opublikowanym tutaj, ale problemem w Twojej aplikacji. – robertklep

0

Chciałbym rozwinąć Obertklep'S (osoby przede mną za odpowiedź):

W swoim przykładzie to moduł NPM zwany „body-parser”, co robi większość pracy, gdzie umieszcza "req.body.name", myślę, że używa parsera ciała, aby uzyskać zawartość atrybutu name/s (nie wiesz, który konkretnie jako twój formularz ma wiele) , który jest odbierany, gdy formularz zostało przesłane.

Jeśli byś nie lubią używać Express,, można tego dokonać przy użyciu „ciągu kwerendy”, który jest wbudowany moduł Node - patrz odpowiedź na poniższy link na przykład jak użyć ciągu kwerendy.

Może pomóc przyjrzeć się tej odpowiedzi StackOverflow, która jest bardzo podobna do Twojej misji. How do you extract POST data in Node.js?

+0

Twoje pytanie jest źle sformułowane. Przed wysłaniem proszę zapoznać się z wytycznymi SO. – sparkplug

Powiązane problemy