“无法发布/”nodeJS

时间:2015-06-29 19:20:17

标签: node.js express socket.io

我希望与nodeJS& amp;实时开发todo-list。 socket.io

我可以读取任务,但是在插入任务时,我有一个POST错误“无法发布/”但是服务器正确接收了该任务,因为我可以在控制台日志中读取它并返回到localhost,该任务被添加...我想我必须做错了,但我不知道如何正确地做到这一点。 这是我的代码

index.html:

<body>
        <h1>Todo list temps réel !</h1>
 
        <form action="/" method="post" id="formulaire_tache">
            <input type="text" name="message" id="tache" placeholder="Votre tache..." size="50" autofocus />
            <input type="submit" id="envoi_tache" value="Envoyer" />
        </form>
 
        <section id="zone_todo">
          <ul>
 
          </ul>
        </section>
 
 
        <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
        <script src="/socket.io/socket.io.js"></script>
        <script>
 
            // Connexion à socket.io
            var socket = io.connect('http://localhost:8080');
 
            // On declenche l'evenement nouveau_client
            socket.emit('nouveau_client');
 
            socket.on('initTodo', function(todolist){
              //On recupere les taches
              console.log('Client');
              todolist.forEach(function(tache, index){
                $('#zone_todo').prepend('<li><a href="/todo/supprimer/' + index + '">✘</a>' + tache + '</li>');
              })
            })
 
            // Lorsqu'on envoie le formulaire, on transmet le message et on l'affiche sur la page
            $('#formulaire_tache').submit(function () {
                var message = $('#tache').val();
                socket.emit('ajout', message); // Transmet la tache au serveur
                insereMessage(message); // Affiche la tache aussi sur notre page
                $('#tache').val('').focus(); // Vide la zone et remet le focus dessus
                return false; // Permet de bloquer l'envoi "classique" du formulaire
            });
 
            // Ajoute un message dans la page
            function insereMessage(tache) {
                $('#zone_todo').prepend('<li><a href="/todo/supprimer/' + index + '">✘</a>' + tache + '</li>');
            }
        </script>
    </body>

我的app.js

    var app = require('express')(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server),
    ent = require('ent'), // Permet de bloquer les caractères HTML (sécurité équivalente à htmlentities en PHP)
    fs = require('fs');
    var todolist = ['test', 'test2'];
 
 
 
app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html');
});
 
 
io.sockets.on('connection', function (socket) {
    // Dès qu'on nous donne un pseudo, on le stocke en variable de session et on informe les autres personne
 
    socket.on('nouveau_client', function() {
        console.log(todolist);
        socket.emit('initTodo', todolist);
    });
 
    // Dès qu'on reçoit un message, on récupère le pseudo de son auteur et on le transmet aux autres personnes
    socket.on('ajout', function (tache) {
        tache = ent.encode(tache);
        todolist.push(tache);
        console.log('tache ajouter ' + tache);
        //socket.broadcast.emit('ajout', {tache: tache});
    });
});
 
server.listen(8080);

和我的控制台日志:

node app.js 

[ 'test', 'test2' ]

tache ajouter azerty

[ 'test', 'test2', 'azerty' ]

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

您不能使用return false来阻止提交的正常行为。 因此,电话号码node到达时/没有发布方法。

你必须使用:

$('#formulaire_tache').submit(function (event) {

      event.preventDefault();   // you must use this!

      var message = $('#tache').val();
      socket.emit('ajout', message); // Transmet la tache au serveur
      insereMessage(message); // Affiche la tache aussi sur notre page
      $('#tache').val('').focus(); // Vide la zone et remet le focus dessus
});

答案 1 :(得分:0)

POST的Nodejs代码段

NodeJS Native

var http = require("http");

var options = {
  "method": "POST",
  "hostname": "localhost",
  "port": "8080",
  "path": "/api/subject",
  "headers": {
    "content-type": "application/json",
    "cache-control": "no-cache"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write(JSON.stringify({ 
  author: "balu",
  title: 'Test NodeJS  POST' }));

req.end();

NodeJS请求

    var request = require("request");

    var options = { method: 'POST',
      url: 'http://localhost:8080/api/subject',
      headers: 
       { 'cache-control': 'no-cache',
         'content-type': 'application/json' },
      body: 
       { author: 'Balu',
         title: 'NodeJS Post' },
      json: true };

    request(options, function (error, response, body) {
      if (error) throw new Error(error);

      console.log(body);
    });

NodeJS Unirest

var unirest = require("unirest");

var req = unirest("POST", "http://localhost:8080/api/subject");

req.headers({
  "cache-control": "no-cache",
  "content-type": "application/json"
});

req.type("json");
req.send({
  "author": "Balu",
  "title": "NodeJs Post"
});

req.end(function (res) {
  if (res.error) throw new Error(res.error);

  console.log(res.body);
});