user4849989
user4849989

Reputation:

What is wrong with this javascript code in node.js and with rethinkdb as backend?

My javascript code is as follows:

var r = require('rethinkdb');

var soll1=null; 
var soll=null; 
r.connect( {host: 'localhost', port: 28015}, function(err, conn) {

r.db("discogs").table("releases").limit(4).run(conn, function(err, cursor) {
if (err) throw err;
    cursor.toArray(function(err, result) {
    if (err) throw err;

    soll=result.country;
});

});
});

  var http = require('http');
   http.createServer(function (req, res)    {res.write(soll);res.end();}).listen(3001, "127.0.0.1");
 console.log('Server running at http://127.0.0.1:3001/');

My JSON in rethinkdb is as follows. i would like to extract "country" value:

    {
    "release":{
       "genres":{
         "genre":"Electronic"
      },
  "identifiers":{
     "identifier":[
        {
           "description":"A-Side",
           "value":"MPO SK 032 A1 G PHRUPMASTERGENERAL T27 LONDON",
           "type":"Matrix / Runout"
        },
        {
           "description":"B-Side",
           "value":"MPO SK 032 B1",
           "type":"Matrix / Runout"
        },
        {
           "description":"C-Side",
           "value":"MPO SK 032 C1",
           "type":"Matrix / Runout"
        },
        {
           "description":"D-Side",
           "value":"MPO SK 032 D1",
           "type":"Matrix / Runout"
        }
     ]
  },
  "status":"Accepted",
  "videos":{
     "video":[
        {
           "title":"The Persuader (Jesper Dahlbäck) - Östermalm",
           "duration":290,
           "description":"The Persuader (Jesper Dahlbäck) - Östermalm",
           "src":"http://www.youtube.com/watch?v=AHuQWcylaU4",
           "embed":true
        },
        {
           "title":"The Persuader - Vasastaden",
           "duration":380,
           "description":"The Persuader - Vasastaden",
           "src":"http://www.youtube.com/watch?v=5rA8CTKKEP4",
           "embed":true
        },
        {
           "title":"The Persuader-Stockholm-Sodermalm",
           "duration":335,
           "description":"The Persuader-Stockholm-Sodermalm",
           "src":"http://www.youtube.com/watch?v=QVdDhOnoR8k",
           "embed":true
        },
        {
           "title":"The Persuader - Norrmalm",
           "duration":289,
           "description":"The Persuader - Norrmalm",
           "src":"http://www.youtube.com/watch?v=hy47qgyJeG0",
           "embed":true
        }
     ]
  },
  "labels":{
     "label":{
        "catno":"SK032",
        "name":"Svek"
     }
  },
  "companies":{
     "company":[
        {
           "id":271046,
           "catno":"",
           "name":"The Globe Studios",
           "entity_type_name":"Recorded At",
           "resource_url":"http://api.discogs.com/labels/271046",
           "entity_type":23
        },
        {
           "id":56025,
           "catno":"",
           "name":"MPO",
           "entity_type_name":"Pressed By",
           "resource_url":"http://api.discogs.com/labels/56025",
           "entity_type":17
        }
     ]
  },
  "styles":{
     "style":"Deep House"
  },
  "formats":{
     "format":{
        "text":"",
        "name":"Vinyl",
        "qty":2,
        "descriptions":{
           "description":[
              "12\"",
              "33 ⅓ RPM"
           ]
        }
     }
  },
  "country":"Sweden",
  "id":1,
  "released":"1999-03-00",
  "artists":{
     "artist":{
        "id":1,
        "anv":"",
        "name":"Persuader, The",
        "role":"",
        "tracks":"",
        "join":""
     }
  },
  "title":"Stockholm",
  "master_id":5427,
  "tracklist":{
     "track":[
        {
           "position":"A",
           "duration":"4:45",
           "title":"Östermalm"
        },
        {
           "position":"B1",
           "duration":"6:11",
           "title":"Vasastaden"
        },
        {
           "position":"B2",
           "duration":"2:49",
           "title":"Kungsholmen"
        },
        {
           "position":"C1",
           "duration":"5:38",
           "title":"Södermalm"
        },
        {
           "position":"C2",
           "duration":"4:52",
           "title":"Norrmalm"
        },
        {
           "position":"D",
           "duration":"5:16",
           "title":"Gamla Stan"
        }
     ]
  },
  "data_quality":"Complete and Correct",
  "extraartists":{
     "artist":{
        "id":239,
        "anv":"",
        "name":"Jesper Dahlbäck",
        "role":"Music By [All Tracks By]",
        "tracks":"",
        "join":""
     }
  },
  "notes":"The song titles are the names of Stockholm's districts."
   }
 }

When I try and run it using node.js, I get the following error:

 http.js:852
     throw new TypeError('first argument must be a string or Buffer');
      ^
 TypeError: first argument must be a string or Buffer
     at ServerResponse.OutgoingMessage.write (http.js:852:11)
    at Server.<anonymous> (/home/dhiraj/http_server.js:19:44)
at Server.emit (events.js:98:17)
at HTTPParser.parser.onIncoming (http.js:2109:12)
at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:122:23)
at Socket.socket.ondata (http.js:1967:22)
at TCP.onread (net.js:528:27)

Sorry for if my question seems cumbersome. But I can't understand where am I going wrong?

Upvotes: 1

Views: 152

Answers (2)

Molda
Molda

Reputation: 5704

Most probably the variable soll is still null when you trying to send it. Put

console.log('soll:', soll); 

just before res.write... to check it.

Upvotes: 1

Robin
Robin

Reputation: 864

As the error message says, res.write expects a string or Buffer object, so you must make sure the output is string.

soll=result.country;

You have the soll variable set inside some callback functions that will be executed at a later point of time when compared to res.write(soll); statement.

So for just debug purpose you could try

res.write(soll?soll:'soll has null value');  

I expect you would see

soll has null value

This way atleast you will be able to understand what goes wrong in your case :D

hope this helps you get going :D

Upvotes: 0

Related Questions