节点js上的简单服务器

你好全部:)我的问题是,不工作response.vrite()为什么? 还有一个问题。 将被称为db.open每个启动/升级页面?

var http = require("http"); var Db = require ("mongodb").Db; var Server = require("mongodb").Server; function start () { 'use strict'; function onRequest (request, response) { 'use strict'; var db = new Db ("TestApp", new Server ("127.0.0.1", 27017, {})); response.writeHead(200, {"Content-Type": "application/json", "Access-Control-Allow-Origin": "*"}); db.open (function (err, db, response) { db.collection ('ObjectCollection', function (err, collection) { collection.find().toArray (function (err, docs) { console.log (docs); response.write(JSON.stringify(docs)); }); }); }); response.end(); } http.createServer(onRequest).listen(8080); console.log ('Server has started...') }exports.start = start; 

你在response.end之前调用了response.write 。 在callback内移动response.end如下所示:

 var http = require("http"); var Db = require ("mongodb").Db; var Server = require("mongodb").Server; function start () { 'use strict'; function onRequest (request, response) { 'use strict'; var db = new Db ("TestApp", new Server ("127.0.0.1", 27017, {})); response.writeHead(200, {"Content-Type": "application/json", "Access-Control-Allow-Origin": "*"}); db.open (function (err, db, response) { db.collection ('ObjectCollection', function (err, collection) { collection.find().toArray (function (err, docs) { console.log (docs); response.write(JSON.stringify(docs)); response.end(); }); }); }); } http.createServer(onRequest).listen(8080); console.log ('Server has started...') } exports.start = start; 

是的,每个请求将打开一个新的Db对象,所以最好在启动时打开一次。

像约翰尼说的,你的调用response.end()以外的asynchronousfunction。 作为一个规则,除非你知道父函数如何工作,否则你不应该指望实际上以阻塞方式执行的callback。 DB.open可能在连接完成后运行这个callback,而且我们不知道需要多长时间。 由于DB.Open是非阻塞的,节点会在DB.open对数据库的asynchronous调用甚至完成之前执行response.end。 你可能想读一点关于asynchronousJavaScript