我无法在NodeJs服务器

时间:2015-05-28 13:35:15

标签: node.js

我对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 Output

我做错了什么?邮寄也是一个要求,对吗?为什么行console.log("请求收到" +路径名+"。");在我提交时没有被执行?

PS:所有代码和其他模块都可以在我的github https://github.com/ricardovsilva/nodeJs-beginnerBook

上找到

2 个答案:

答案 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上的代码。