【问题标题】:Node.js API with Express an async: Trouble with multiple request带有 Express 异步的 Node.js API:多个请求的问题
【发布时间】:2016-10-05 05:55:36
【问题描述】:

我是 node.js 的新手,正在尝试创建一个小型 API。我使用 Express 进行路由,使用 async.jc 逐步处理呼叫。当只有一个请求进入时,这很好用,但是当我尝试从我的机​​器中触发 2 个或更多请求时,进程会混淆变量中的值并崩溃。

这是来自我的来源的简短 sn-p:

router.get('/new', function (request, res) {
    async.waterfall([
        function(callback) {

            // get a unique domain
            client.spop('domainSet', function(err, domain) {
                userdata = {
                    email: 'user' + '@' + domain + '.' + mydomain,
                    password: randomstring.generate(10),
                    username: domain,
                    name: domain,
                    confirm: "false"
                }
                if (err) return next(err);
                callback(null, userdata, userdata.password);
            })

        },
        function(userdata, userpwd, callback) {
            myapp.users.create(userdata, function(user) {
                console.log('Creating new user: ' + userdata.email);
                callback(null, user, userpwd);
            });
        },

如何保持每个请求的“上下文/范围”?我确定我错过了什么(-:或者是我从同一台机器发出请求的唯一问题??

【问题讨论】:

  • 第一个函数中的 userdata 没有在任何地方声明,因此它正在获取全局范围。试试var userdata = {
  • ahhh ;) 谢谢 - 如果你从你的评论中创建一个答案,我会接受它;)

标签: node.js express asynchronous


【解决方案1】:

第一个瀑布函数中的userdata 需要在该函数中声明,否则它具有全局范围。

router.get('/new', function (request, res) {
    async.waterfall([
        function(callback) {

            // get a unique domain
            client.spop('domainSet', function(err, domain) {
                var userdata = {
                    email: 'user' + '@' + domain + '.' + mydomain,
                    password: randomstring.generate(10),
                    username: domain,
                    name: domain,
                    confirm: "false"
                }
                if (err) return next(err);
                callback(null, userdata, userdata.password);
            })

        },
        function(userdata, userpwd, callback) {
            myapp.users.create(userdata, function(user) {
                console.log('Creating new user: ' + userdata.email);
                callback(null, user, userpwd);
            });
        },

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2011-06-06
    • 2021-02-18
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多