我希望与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' ]
感谢您的帮助
答案 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);
});