gpt4 book ai didi

node.js - 尝试调用方法时获取 "Function: Bound"

转载 作者:搜寻专家 更新时间:2023-11-01 00:31:23 24 4
gpt4 key购买 nike

我正在使用 Sails.js MVC,我正在尝试设置一项服务,以便我可以调用 Active Directory 服务器并将用户的数据传回我的 Controller 。

我为此使用了一些公司内部模块,这些模块连接到我们的服务器并传回一个用户数组,其中包含选定用户的所有数据。

如果我通过直接在 API Controller 中创建一个函数来执行此操作,它工作正常,但是当通过从单独的文件调用函数而不是返回 [Function: bound] 的数组来执行此操作时,它可以正常工作。

来自 Controller 的代码 (LabController.js):

var adGet = require('../services/adGet');
module.exports = {

test: function (req, res) {
console.log(adGet.userData);
res.view({
user: adGet.userData
});
}
}

来自服务的代码 (adGet.js):

module.exports = {
userData: function (req, res) {
var ad = require('active-directory');
ad.setCredentials({
user: 'username_removed',
password: 'password_removed'
});
ad.getUser(req.session.sisso.idsid).then(function (user) {
return (user);
});
}
}

非常感谢任何帮助。

最佳答案

这里有几个问题。

首先,您尝试在 userData 服务方法中使用 return 来返回数据,但它是一个异步函数,因此 return语句将数据发送到任何地方。您需要将回调函数作为参数传递给 userData,该回调函数可以在数据准备就绪时调用(即,当数据库查询返回时):

module.exports = {
// note the new `cb` argument
userData: function (req, res, cb) {
var ad = require('active-directory');
ad.setCredentials({
user: 'username_removed',
password: 'password_removed'
});
ad.getUser(req.session.sisso.idsid)
.then(function (user) {
// Still nice to use `return` to make sure nothing
// gets executed after this statement, but it's the
// callback function that actually gets the data.
// Note the `null` first argument, indicating no errors.
return cb(null,user);
})
.catch(err) {
return cb(err);
});
}
}

其次,您将 adGet.userData 函数作为局部变量发送到您的 View ,但实际上并没有调用它来获取数据。由于它是一个异步函数,您将无法从您的 View 中调用它。您需要从 Controller 中调用它并将结果发送到 View :

var adGet = require('../services/adGet');
module.exports = {

test: function (req, res) {
// Call service function, passing callback function in as argument
adGet.userData(req, res, function(err, user) {
// Handle errors
if (err) {return res.serverError(err);}
// If all goes well, send user data to view
return res.view({
user: user
});
});
}
}

不太重要的是,您可以重构 userData 方法,使其不接受 reqres 作为参数——这太过分了。尽可能为您的 Controller 保存reqres。最好让 userData 只期望 userIdcallback 作为参数。此外,除非您使用 config/globals.js 文件关闭了全局服务,否则您不需要在 Controller 顶部请求服务文件; adGet 变量将自动提供给您。

关于node.js - 尝试调用方法时获取 "Function: Bound",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32319360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com