传递正在创build的参数

我正在做一个NodeJS / Express监听器,并且正在创build我的connectListener正在创build的input:

 app.get('/server/:args', function(req, res) { res.sendFile(__dirname + '/index.html'); // ... var args = req.param("args"); var client = net.connect({port : 50505}, connectListener(args, client)); }); 

然后我有我的connectListener函数:

 function connectListener(args, client) { console.log("Connected to server."); console.log(args); client.write(args); // .... } 

但是,我得到一个错误,参数是未定义的:

 TypeError: Cannot read property 'write' of undefined at connectListener (C:\Users\ES\workspace_luna\WptHash\server-src\index.js:39:8) at C:\Users\ES\workspace_luna\WptHash\server-src\index.js:33:43 at Layer.handle [as handle_request] (C:\Users\ES\workspace_luna\WptHash\server-src\node_modules\express\lib\router\layer.js:82:5) at next (C:\Users\ES\workspace_luna\WptHash\server-src\node_modules\express\lib\router\route.js:100:13) at Route.dispatch (C:\Users\ES\workspace_luna\WptHash\server-src\node_modules\express\lib\router\route.js:81:3) at Layer.handle [as handle_request] (C:\Users\ES\workspace_luna\WptHash\server-src\node_modules\express\lib\router\layer.js:82:5) at C:\Users\ES\workspace_luna\WptHash\server-src\node_modules\express\lib\router\index.js:235:24 at param (C:\Users\ES\workspace_luna\WptHash\server-src\node_modules\express\lib\router\index.js:332:14) at param (C:\Users\ES\workspace_luna\WptHash\server-src\node_modules\express\lib\router\index.js:348:14) at Function.proto.process_params (C:\Users\ES\workspace_luna\WptHash\server-src\node_modules\express\lib\router\index.js:392:3) Error: Can't set headers after they are sent. at SendStream.headersAlreadySent (C:\Users\ES\workspace_luna\WptHash\server-src\node_modules\express\node_modules\send\index.js:313:13) at SendStream.send (C:\Users\ES\workspace_luna\WptHash\server-src\node_modules\express\node_modules\send\index.js:494:17) at onstat (C:\Users\ES\workspace_luna\WptHash\server-src\node_modules\express\node_modules\send\index.js:585:10) at FSReqWrap.oncomplete (fs.js:99:15) 

那么,我该如何正确地创buildclientvariables,使其可以在下面的函数中使用呢? 我正在做这样的functionconnectListener而不是内联的原因是我计划跨越更多的端口复制客户端来处理同时连接,所以我不想重新使用代码,也不使用全局的一组客户端variables/数组(虽然我想我可以……)

看起来问题是你正在调用connectListener ,你应该把它设置为在connect事件上调用的函数:

var client = net.connect({port : 50505}, connectListener);

如果要使用特定的参数写入特定的客户端,可以通过在connectListener函数中定义响应来实现:

 app.get('/server/:args', function (req, res) { var client, args; res.sendFile(__dirname + '/index.html'); // ... function connectListener () { console.log("Connected to server."); console.log(args); client.write(args); // .... } args = req.param("args"); client = net.connect({port : 50505}, connectListener); });