Node.js - Как отправить данные из html для выражения
это пример формы в 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 on your mind?"></textarea>
<input type="submit" value="Send message" />
</fieldset>
</form>
</div>
</body>
</html>
и это node.js-функция, которая выполняется на сервере:
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/');
У меня есть 2 вопроса:
- Как я могу вызвать функцию
myaction
в node.js со страницы html? Поскольку html файл работает на порту 80 и node.js на 8080 (когда я пытаюсь переместить node.js на порт 80, он записывает событие "//Unhandled" error)
- В node.js-функции, где я помещаю "?????" как я могу получить данные из html-формы.
Когда я набираю req.html.body.name, я не получаю данные...
Ответы
Ответ 1
Использование http.createServer
очень низкоуровневое и действительно не полезно для создания веб-приложений as-is.
Хорошая структура для использования поверх нее - это Express, и я бы серьезно предложил ее использовать. Вы можете установить его с помощью npm install express
.
Когда у вас есть, вы можете создать базовое приложение для обработки вашей формы:
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/');
});
Вы можете указать свою форму, используя:
<form action="http://127.0.0.1:8080/myaction" method="post">
Причина, по которой вы не можете запустить Node на порту 80, состоит в том, что на этом порту уже выполняется процесс (который обслуживает ваш index.html
). Вы можете использовать Express для статического контента, например index.html
, с помощью промежуточного программного обеспечения express.static
.