首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何处理回调函数中的响应(例如nodejs中的cradle使用)

如何处理回调函数中的响应(例如nodejs中的cradle使用)
EN

Stack Overflow用户
提问于 2011-03-15 04:48:49
回答 3查看 6K关注 0票数 6

我在"nodejs“中使用了"express”和"cradle“。如果我请求我的数据库,我必须定义一个回调来处理响应。不幸的是,我无法在回调函数中访问res (response)。解决此问题的最佳实践是什么?这是我的代码。

代码语言:javascript
复制
var cradle = require('cradle');
var db = new cradle.Connection().database('guestbook');
app.get('/guestbook', function(req, res) {
  db.view('guestbook/all', function(err, doc) { 
    console.log(doc);
    // How can I use res in this callback
    // to send the response?
  });
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-15 05:00:24

您可以只在内部回调中使用res

在JavaScript中,内部函数“继承”外部函数的变量。或者更准确地说,该函数形成一个闭包,它是一个可以有自由变量的表达式。闭包从外部作用域绑定变量,外部作用域可以是另一个函数的作用域,也可以是全局作用域。

票数 10
EN

Stack Overflow用户

发布于 2011-12-30 01:24:25

你可以试试这个。

最重要的(也许是你的陷阱?)请记住,'db.view‘将只注册一个回调闭包并继续。不要在此闭包之外的任何地方关闭您的请求(通过调用“req.end”)。如果您这样做,则很可能在数据库返回时请求已被关闭。一旦关闭http响应对象,任何写入该对象的数据都将失效。

代码语言:javascript
复制
var cradle = require('cradle');
var db = new cradle.Connection().database('guestbook');
app.get('/guestbook', function(req, res) {
    // Register callback and continue..
    db.view('guestbook/all', function(err, guests) {
        // console.log('The waiting had an end.. here are the results');
        guests.forEach(function(guest) {
            if (guest.name) {
                res.write('Guest N: ' + guest.name);
            }
        });
        // Close http response (after this no more output is possible).
        res.end('That is all!')
    });
    console.log('Waiting for couch to return guests..');
    // res.end('That is all!'); // DO NOT DO THIS!!!
});
票数 3
EN

Stack Overflow用户

发布于 2011-03-15 05:02:38

有了这段代码,你真的应该可以在这里访问res了。您应该能够使用res.render()res.send(),因为db回调包装在app.get回调函数的闭包中。

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

https://stackoverflow.com/questions/5304320

复制
相关文章

相似问题

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