Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js api中处理多个客户端_Javascript_Node.js - Fatal编程技术网

Javascript 在node.js api中处理多个客户端

Javascript 在node.js api中处理多个客户端,javascript,node.js,Javascript,Node.js,找不到答案,所以我在这里问- 我正在node.js(6.2.0)中编写一个API,在为多个客户端提供服务时遇到了一个问题 该守则是— "use strict"; const express = require('express'); const router = express.Router(); const FileRetriever = require('./FileRetriever'); function doSomething(uid, callback) { let

找不到答案,所以我在这里问-

我正在node.js(6.2.0)中编写一个API,在为多个客户端提供服务时遇到了一个问题

该守则是—

"use strict";

const express = require('express');
const router  = express.Router();

const FileRetriever = require('./FileRetriever');


function doSomething(uid, callback) {
    let finalCount = 0;
    let cb = null;

    FileRetriever.foo(uid, function (err, data) {
        finalCount = data.length;

        cb = callback(finalCount);

        data.forEach(function(obj, i) {
            doSomething2(obj, cb);
        });
    })
}

function doSomething2(_obj, cb) {
    let fn = null;

    FileRetriever.bar(_obj, function(err, data){
        cb(null, data);       
    })

}

router.route('/foo').get(function (req, res) {
    let uid = req.query.uid;

    function callback(_finalCount) {
        let counter    = 1;
        let finalCount = _finalCount;
        let output     = [];

        return function(err, data) {
            output.push(data);

            if (output.length === (finalCount -1)) {
                res.send(output);
            }
        }
    }

    doSomething(uid, callback);
});
显然,它比那个复杂一点,但这是简化版

请帮助我理解我遗漏了什么- 这就是我对它应该如何工作的想法-

用户使用参数uid进入
/foo
。 他到达该路线,并为该用户调用
doSomething
。 在
doSomething
中,我首先获取调用
回调
的初始数据,它返回一个自己的函数,现在称为
cb

cb
被传递到
doSomething2
并在那里被调用时,它仍然在同一个堆栈下,在同一个用户下

我运行了几个测试,其中一个用户应该返回长度为6的输出,另一个用户返回长度为100的输出

当我为每个用户运行此代码一次时,一切正常,但如果两个用户同时调用路由,则长度不是[6100](但它们总是相同的)

我做错了什么? 它应该有用


希望我说的很清楚,谢谢。

您应该创建一个单独的文件,导出您想要使用和需要的函数,就像您需要的express一样。然后需要在route.get函数中调用这些函数。我相信您现在体验到的是,函数是全局设置的,一个用户覆盖了其他用户函数的值。您应该创建一个单独的文件,导出您想要使用的函数,并像您需要的express一样需要它。然后需要在route.get函数中调用这些函数。我相信您现在体验到的是,函数是全局设置的,一个用户覆盖了其他用户函数的值