2013-03-22 11 views
33

dieses Formular Beispiel in html:Node.js - Wie Daten von HTML senden auszudrücken

<!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> 

und dies ist node.js Funktion, die auf dem Server ausgeführt:

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 habe 2 Fragen:

  1. Wie kann ich myaction Funktion in der node.js von der HTML-Seite aufrufen? Weil die html-Datei auf Port 80 und node.js auf 8080 läuft (wenn ich versuche, die node.js nach Port 80 zu verschieben, schreibt sie "// Unhandled 'error' event")
  2. In der Funktion node.js, wo ich stellen "?????" Wie kann ich Daten aus dem HTML-Formular erhalten? Wenn ich tippe req.html.body.name Ich habe nicht die Daten ...
+1

Haben Sie über Express nachgedacht? Es hat einen integrierten Handler für Formulare. Ich benutze es mit großem Erfolg beim Ausfüllen von Formularen. –

Antwort

78

http.createServer zu verwenden sind sehr schwach- und wirklich nicht nützlich für die Erstellung von Web-Anwendungen, wie sie ist.

Ein guter Rahmen zu verwenden ist Express, und ich würde ernsthaft empfehlen, es zu verwenden. Sie können es unter Verwendung von npm install express installieren.

Wenn Sie haben, können Sie eine einfache Anwendung erstellen Sie Ihre Form zu handhaben:

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

Der Grund, warum Sie können‘:

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/'); 
}); 

Sie können Ihre Form Punkt, um es mit machen t run Node an Port 80 ist, weil auf diesem Port bereits ein Prozess läuft (der index.html bedient). Sie können Express verwenden, um auch statische Inhalte wie index.html unter Verwendung der express.static Middleware bereitzustellen.

+1

Fehler beim Kompilieren, d. H. "Fehler: Kann Header nicht festlegen, nachdem sie gesendet wurden ........" – vineet

+4

@chotesah, die nicht mit dem hier veröffentlichten Code verwandt ist, aber ein Problem in Ihrer App. – robertklep

0

I (vor mir die Antwort der Person) auf Obertklep der erweitern möchte:

In seinem Beispiel es ist ein NPM-Modul „Körper-Parser“ genannt, die die meiste Arbeit tun, wo er setzt "req.body.name", glaube ich, er/sie verwendet body-parser, um den Inhalt des Namensattributs/s (nicht sicher, welche speziell als Ihr Formular hat mehrere) , die erhalten wird, wenn das Formular Wird eingereicht.

Wenn Sie nicht möchten, Express verwenden, können Sie diese mit „Abfragezeichenfolgeflag“ erreichen, das ist ein Einbau-Node-Modul - siehe die Antworten in den unten stehenden Link für ein Beispiel, wie Abfragezeichenfolgeflag zu verwenden.

Es könnte hilfreich sein, diese StackOverflow-Antwort zu betrachten, die Ihrer Aufgabe sehr ähnlich ist. How do you extract POST data in Node.js?

+0

Ihre Frage ist schlecht formuliert. Bitte lesen Sie die SO-Richtlinien vor dem Posten. – sparkplug