我对NodeJs真的很陌生(我对C#Asp.Net MVC和Rails有一些了解,所以我已经掌握了MVC概念)。 我正在阅读The Node Beginner(Manuel Kiessling)一书。我只是坚持使用提交按钮创建一个简单的表单。 关键是我没有抓住服务器端的帖子。
这是我的服务器代码:
var http = require("http");
var url = require("url");
function start(route, handle) {
function onRequest(request, response) {
var postData = "";
var pathname = url.parse(request.url).pathname;
console.log("Requisition received for " + pathname + ".");
request.setEncoding("utf8");
request.on("data", function(postDataChunk) {
postData += postDataChunk;
console.log("Receiving part of data from POST '" + postDataChunk + "'.");
});
request.addListener("end", function() {
route(handle, pathname, response, postData);
});
}
http.createServer(onRequest).listen(8888);
console.log("Server started");
}
exports.start = start;
当我启动我的应用程序并转到localhost:8888 / start时,我在控制台中获得所有日志输出。但是当我填写表格并尝试提交时,没有任何反应。
我做错了什么?邮寄也是一个要求,对吗?为什么行console.log("请求收到" +路径名+"。");在我提交时没有被执行?
PS:所有代码和其他模块都可以在我的github https://github.com/ricardovsilva/nodeJs-beginnerBook
上找到答案 0 :(得分:1)
我克隆了您的回购并看了一眼。看起来您在元标记的content
属性上缺少右引号:)
我真的很讨厌将标记放在像这样的魔术字符串中(出于这个原因),但如果这是你必须要做的事情,那么我推荐这个小技巧,以便更容易阅读:
var body = [
'<html>',
' <head>',
' <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />',
' </head>',
' <body>',
' <form action="/upload" method="POST">',
' <textarea name="text" rows="20" cols="60"></textarea>',
' <input type="submit" value="Send text" />',
' </form>',
' </body>',
'</html>'
].join('');
这样,你的所有标记缩进都是字符串的一部分,如果你有代码格式化程序,它将不会被修改。
总而言之,在您完成基本学习后,我强烈建议您深入研究Express这样的框架。
PS - Chrome开发者工具中的“网络”标签是您的朋友:D
您可以从那里看到您的表单根本没有向服务器发出请求:)
答案 1 :(得分:0)
我发现了问题。 当我查看由检查器生成的html时,我看到该表单未被创建。 在我生成的内容中看到更深入的html,我看到这是一个错误的“,这打破了HTML。 实际上,POST从未发生过。 解决了这个问题,现在一切正常。 我还更新了github上的代码。