2012-04-01 12 views
5

sul distacco dei dati al mio expressjs app, questo è quello che sto ottenendo:checksum errata per oggetto liberato

node(58287,0x7fff771ad960) malloc: *** error for object 0x7ff8a8600c58: incorrect 
    checksum for freed object - object was probably modified after being freed. 
*** set a breakpoint in malloc_error_break to debug 
Abort trap: 6 

Qualsiasi idea del perché?

Aggiornamento:

Ecco il codice:

lato client:

$.ajax({ 
url: 'user/' + id, 
type: 'POST', 
dataType:'JSON', 
data: JSON.stringify(data), 
success: function(response){ 
    console.log(response); 
}  
}); 

lato server:

app.post('/user/:id', function(req,res){ 
    var id = req.params.id; 
    console.log(data); 
}); 
.210

Quando uso JSON.stringify sul lato client, sto colpendo questo strano errore:

node(58461,0x7fff771ad960) malloc: * error for object 0x7fa861d00e28: incorrect checksum for freed object - object was probably modified after being freed. * set a breakpoint in malloc_error_break to debug Abort trap: 6

Quando non uso JSON.stringify sul lato client, ottengo 'null 'stringhe sul lato server.

Qualche idea su cosa sto facendo male?

+0

Per curiosità, quale versione di Node stai usando? –

+0

v0.6.12 su un mac – Rajat

risposta

2

Ho riscontrato questo stesso errore di recente. Ecco la soluzione:

Node.js ha riscontrato alcuni bug che causano l'installazione non corretta dall'origine in OS X (vedere ad esempio issue 2061). La buona notizia è che il programma di installazione packaged lo installa correttamente. Quindi, è sufficiente disinstallare Nodo, quindi andare su http://nodejs.org/#download ed eseguire il programma di installazione per Macintosh.

Ho segnalato questo bug sul rilevatore di problemi di nodo here.

2

Questo può essere un errore negli interni di nodejs. (Oppure, se expressjs ha associazioni di codici nativi, forse expressjs.)

Non c'è un modo semplice per scrivere questo tipo di errore da soli in JavaScript. Se riesci a riprodurlo a volontà, probabilmente vorrebbe un bug report. Cerca di capire la quantità minima di codice che può riprodurre il problema.

0

Non ho guardato la causa di questi problemi (plurale - ci sono chiaramente almeno due bug da qualche parte lungo la linea - jquery, nodo, express), anche se una sintesi e soluzione sono i seguenti:

Quando il tuo codice client è simile alla tua domanda aggiornata il server ovviamente non dovrebbe bloccarsi con un errore malloc (bug # 1), sebbene sia comprensibile che la query sia maltrattata, dal momento che stai dicendo a jquery di inviare json e quindi si invia una stringa.

bug # 2 è semplicemente null --> "null" lungo il tubo. Questo almeno non provoca un arresto anomalo del server, perché i tipi di dati corrispondono alle intestazioni (ad esempio, tutti pensano che stiamo usando json), tuttavia qualcuno sta convertendo valori null in stringhe. Il mio sospetto infondato è che è espresso/connesso.

Infine, la soluzione è semplicemente quello di avvolgere i vostri dati in un modo che riesce ad essere trasportati, e poi scartare sul lato server:

lato client: lato

$.post({ 
    url: 'user/' + id, 
    data: {workaround: JSON.stringify(data)}, // no null strings this way 
    success: function(response){ 
     console.log(response); 
    }  
}); 

Server :

app.post('/user/:id', function(req,res){ 
    var id = req.params.id; 
    var data = JSON.parse(req.body.workaround); // unwrap 
    console.log(data); 
}); 

Se trovo il tempo, io indagare e cercare e post ab rapporto ug da qualche parte (è un problema quando non si sa di chi sia la colpa ...), per favore prova a fare anche questo.

+0

Ho pubblicato questo problema anche sui gruppi di google expressjs ma non ho ancora ricevuto alcuna risposta. – Rajat

+0

Inoltre, la query non è errata nel codice lato client che ho postato. 'dataType': 'json' è il formato della risposta che ci si aspetta dal server, non il tipo di dati che gli viene inviato. – Rajat

+0

@Rajat, infatti, 'dataType' mi fa inciampare sempre, lo proxy per essere rinominato' returnDataType' ... La soluzione alternativa funziona comunque, ed è piuttosto semplice da implementare nel frattempo. – davin

0

Si sta chiamando console.log sul lato server su "dati" che non è definito nell'ambito del proprio esempio.

1

Ho appena ricevuto questo errore oggi e l'aggiornamento di Node.js tramite MacPorts da 0.8.9_0 a 0.8.10_1 ha risolto il problema.
Non sembra che questo sia stato indirizzato in modo specifico, dato che le segnalazioni di bug e il changelog non indicano che (http://blog.nodejs.org/2012/09/25/node-v0-8-10-table /).