Вам нужно связать d для каждой созданной функции. Один из способов сделать это - передать его как параметр со значением по умолчанию:
lambda d=d: self.root.change_directory(d)
Теперь функция внутри функции использует этот параметр, хотя он имеет то же имя, и значение по умолчанию для который вычисляется при создании функции. Чтобы помочь вам увидеть это:
lambda bound_d=d: self.root.change_directory(bound_d)
Помните, как работают значения по умолчанию, например, для изменяемых объектов, таких как списки и dicts, потому что вы привязываете объект.
Эта идиома параметров с значениями по умолчанию достаточно распространены, но может быть неудачным, если вы исследуете параметры функции и определяете, что делать в зависимости от их присутствия. Вы можете избежать параметра с другим закрытием:
(lambda d=d: lambda: self.root.change_directory(d))()
# or
(lambda d: lambda: self.root.change_directory(d))(d)
. Еще лучше, редизайн того, как вы обрабатываете «команды», поможет здесь и должен помочь в другом месте.
Попробуйте использовать res.json ("JSON Object"); вместо res.send () ..
Еще попробуйте проверить БД с помощью инструмента, такого как robomongo
Мне кажется, что это проблема. Когда вы используете метод find () в mongoose, он выдает массив. поэтому вы конвертируете этот массив в json и отправляете его с помощью res.send (). поэтому при доступе к нему с помощью Angular. это может привести к сбою и неправильному формату, поэтому попробуйте изменить код в узле js следующим образом. Вместо find () попробуйте использовать findOne () в мангусте следующим образом. Я предполагаю, что вы только собираетесь взять одного пользователя из этого запроса, верно?
// Node.js
router.get('/users/all', authenticate, (req, res) => {
User.findOne({some query}).select('firstName lastName email').then((user) => {
res.send(user); // there was a typo I changed it too. look in the question not user it was users.
});