这是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>
这是在服务器上运行的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个问题:
>如何从html页面调用node.js中的myaction函数?因为html文件在端口80上运行,node.js在8080上运行(当我尝试将node.js移动到端口80时,它写入“//未处理的错误”事件)
>在node.js函数中,我把“?????”如何从html表单获取数据。
当我键入req.html.body.name时,我没有得到数据…
解决方法
使用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/'); });
你可以使你的表单指向它使用:
<form action="http://127.0.0.1:8080/myaction" method="post">
你不能在端口80上运行Node的原因是因为在该端口上已经有一个进程正在运行(正在为你的index.html服务)。您可以使用Express使用express.static中间件来提供静态内容,如index.html。