这个javascript代码在node.js中有什么问题,并且以rethinkdb作为后端?

我的JavaScript代码如下:

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/'); 

我在rethinkdb中的JSON如下。 我想提取“国家”的价值:

  { "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." } } 

当我尝试使用node.js运行它时,出现以下错误:

  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) 

对不起,如果我的问题似乎麻烦。 但我不明白我哪里错了?

如错误消息所示, res.write需要一个string或Buffer对象,所以您必须确保输出是string。

 soll=result.country; 

你有sollvariables设置在一些callback函数里面,这些函数将会在res.write(soll);比较晚的时候执行res.write(soll); 声明。

所以只是为了debugging目的,你可以试试

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

我希望你会看到

soll具有空值

这样你至less可以理解你的情况出了什么问题:D

希望这可以帮助你开始:D

当你试图发送variablessoll的时候,它很可能仍然是空的。 放

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

在res.write之前…检查它。