Nœud.js - comment envoyer des données de html à express

ceci est un exemple de formulaire en html:

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

et ici noeud.fonction js qui s'exécute sur le serveur:

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

j'ai 2 questions:

  1. Comment puis-je appeler myaction fonction dans le noeud.js de la page html? Parce que le fichier html tourne sur le port 80 et le noeud.js sur 8080 (quand j'essaie de déplacer le noeud.js pour le port 80, il écrit "// non Gérée "erreur " événement")
  2. dans le nœud.js fonction où j'ai mis "?????"Comment puis-je obtenir des données à partir du formulaire html. Quand je tape req.html.corps.nom Je ne comprends pas les données...
37
demandé sur Mojtaba 2013-03-22 15:09:40

2 réponses

L'utilisation de http.createServer est de très bas niveau et vraiment pas utile pour créer des applications web en l'état.

un bon cadre à utiliser en haut de celui-ci est Express, et je suggère sérieusement de l'utiliser. Vous pouvez l'installer en utilisant npm install express .

quand vous avez, vous pouvez créer une application de base pour manipuler votre formulaire:

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

vous pouvez faire votre point de forme à elle en utilisant:

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

le la raison pour laquelle vous ne pouvez pas exécuter Node sur le port 80 est qu'il y a déjà un processus sur ce port (qui sert votre index.html ). Vous pouvez utiliser Express pour également servir du contenu statique , comme index.html , en utilisant le middleware express.static .

83
répondu robertklep 2015-06-18 20:20:53

j'aimerais développer la réponse D'Obertklep. Dans son exemple, c'est un module NPM appelé body-parser qui fait la plupart du travail. Là où il met req.body.name , je crois qu'il/elle utilise body-parser pour obtenir le contenu de l'attribut(s) de nom reçu lorsque le formulaire est soumis.

si vous ne voulez pas utiliser Express, utilisez querystring qui est un module de Noeud intégré. Voir les réponses dans le lien ci-dessous pour un exemple d'utilisation de querystring .

, Il pourrait aider à regarder cette réponse , qui est très similaire à votre quête.

0
répondu Programmerion 2018-10-06 19:32:47