Node.js – 如何从html发送数据来expression

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

我有两个问题:

  1. 我怎样才能从html页面调用node.js中的myaction函数? 因为html文件在端口80上运行,在8080上运行node.js(当我尝试将node.js移动到端口80时,它写入“//未处理的错误”事件)
  2. 在我把“?????”的node.js函数中, 我怎样才能从HTML表单中获取数据? 当我键入req.html.body.name我没有得到数据…

使用http.createServer是非常低级的,对于创buildweb应用程序是没有用处的。

Express是一个很好的框架,我会认真的build议使用它。 你可以使用npm install express进行npm install express

当你有,你可以创build一个基本的应用程序来处理你的表单:

 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上运行节点的原因是因为该端口上已经有一个进程正在运行(它正在为您的index.html服务)。 您可以使用Express来使用express.static中间件来提供静态内容,如index.html