Otrzymuję błąd - "Nie można odczytać nieruchomości" Wynik "niezdefiniowany" w "Var Score - REQ.BODY". Aby to zrobić, zgaduję, że muszę zdefiniować i / lub zainicjować "Reqbody" (jestem dość nowy w Node.js), jakikolwiek pomysł, jak to robię?

Oto mój kod node.js, jak stoi:

var http = require('http');
var express = require('express');

console.log('Game server running...'); 

http.createServer(function (req, res) { 
console.log('Player submitted high-score:');

var score = req.body.score;
  console.log(score);   

res.writeHead(200, {'Content-Type': 'text/plain'}); 
res.end('_testcb(\'"Your high-score has been submitted."\')'); 
}).listen(80);

Poniżej znajduje się HTML z polem tekstowym wejściowym i przyciskiem przesyłania:

Your score: <input id="score" name="score" type="text"></input>
<button id="SubmitBtn" type="submit">Submit</button>

A poniżej jest JavaScript w HTML (na wypadek, gdyby pomaga odpowiedzieć na moje pytanie):

<script> 
 $(document).ready(function() {
$('#SubmitBtn').click(function (event) {
$.ajax({ 
url: 'http://localhost',
data: { score : $("input[name='score']").val() },
dataType: "jsonp", 
jsonpCallback: "_testcb", 
cache: false, 
timeout: 5000, 
success: function(data) { 
    $("#test").append(data); 
}, 
error: function(jqXHR, textStatus, errorThrown) { 
    alert('Error connecting to the Node.js server... ' + textStatus + " " + errorThrown); 
} 
}); 
});
}); 

Zasadniczo chcę uzyskać dane wejściowe z pola tekstowego wejściowego "Wynik" z Doc HTML, ale pobieranie błędu "nie może odczytać właściwości" wynik nieokreślony "w" Var wynik - Req.body.score ". Zgaduję, że muszę gdzieś zainicjować / zdefiniować "Req, gdzieś, ale nie wiem, jak? Czy ktoś może mi pomóc?

Ponadto, znalazłem to w Internecie o inicjalizacji / definiowaniu "RESBODY", może być przydatne?

req.on('response', function (res) {
    res.body = "";
    res.on('data', function (chunk) {
        res.body += chunk;
    });

res.on('end', function () {
     console.log(res.body);
});
});

Dzięki

2
Mike 7 grudzień 2013, 18:32

2 odpowiedzi

Najlepsza odpowiedź

Nie wiem, czy niektóre "oprogramowanie pośrednie" zapewniają req.body, ale aby kontynuować tę ścieżkę:

var http = require('http');
var express = require('express');
var qs = require('querystring');

console.log('Game server running...'); 

http.createServer(function (req, res) { 
    console.log('Player submitted high-score:');

    var bodyParts = [];

    req.on("data", function(part) {
        bodyParts.push(part);
    });

    req.on("end", function() {
        var body = Buffer.concat(bodyParts).toString("utf8");
        var data = qs.parse(data);

        var score = data.score;
        console.log(score);

        res.writeHead(200, {'Content-Type': 'text/plain'}); 
        res.end('_testcb(\'"Your high-score has been submitted."\')'); 
    });
}).listen(80);
0
Ry- 7 grudzień 2013, 14:40

Nieruchomość {X0}} jest wyposażona przez oprogramowanie pośrednie Bodyparser, dzięki czemu musisz włączyć to w aplikacji Node.js

app.use(express.bodyParser())

Więc

var http    = require('http');
var express = require('express');
var app     = express();

console.log('Game server running...'); 

app.use(express.bodyParser())

console.log('Player submitted high-score:');

app.get('/', function(req, res) {
    var score = req.body.score;
    console.log(score);   
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('_testcb(\'"Your high-score has been submitted."\')'); 
});

app.listen(80);

req to żądanie, zawierające dane z bieżącego żądania, a {x1}} jest odpowiedzią, którą wysyłasz z powrotem z serwera, więc próbując uzyskać dane z wejścia z respone, które wysyłasz, nie idzie pracować.

0
adeneo 7 grudzień 2013, 14:47