roy*_*oyb 40 forms html5 http-post node.js node.js-client
这是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>
Run Code Online (Sandbox Code Playgroud)
这是在服务器上运行的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/');
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
myaction从html页面调用node.js中的函数?因为html文件在端口80和8080上的node.js上运行(当我尝试将node.js移动到端口80时,它会写入"// Unhandled"错误'event')rob*_*lep 91
使用http.createServer非常低级,对于按原样创建Web应用程序实际上没有用.
在它上面使用的一个很好的框架是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/');
});
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令使表单指向它:
<form action="http://127.0.0.1:8080/myaction" method="post">
Run Code Online (Sandbox Code Playgroud)
您无法在端口80上运行Node的原因是因为已经有一个进程在该端口上运行(正在为您服务index.html).您可以使用Express来提供静态内容,例如index.html,使用express.static中间件.