首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点上的简单服务器js

节点上的简单服务器js
EN

Stack Overflow用户
提问于 2012-12-02 13:23:54
回答 2查看 230关注 0票数 2

大家好:)我的问题是response.vrite ()为什么不能工作?还有另一个问题。每个启动/升级页面都会被称为db.open吗?

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-02 13:31:49

您将在调用response.write之前调用response.end。将response.end调用移动到回调中,如下所示:

代码语言:javascript
复制
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对象,所以最好在启动时打开一次。

票数 2
EN

Stack Overflow用户

发布于 2012-12-02 13:46:22

正如约翰尼所说,在异步功能之外调用response.end()。通常,除非您知道回调的父函数是如何在幕后工作的,否则您永远不应该指望回调以阻塞的方式实际执行。DB.open可能会在连接完成时运行该回调,我们不知道这需要多长时间。由于DB.Open是非阻塞的,因此node会在DB.open对数据库的异步调用完成之前执行response.end。您可能需要阅读一些关于异步javascript的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13666678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档