我有一些代码来生成用户配置文件,然后尝试使用Mongoose的create()
函数将此配置文件保存到数据库中。无论出于什么原因,这都不起作用。看来我的用户配置文件数据未成功传递到控制器中的add()
函数。我不清楚为什么会这样。
首先,这是我控制器的add()
函数:
exports.add = async ({
data = {}
} = {}) => {
console.log('data: ', data);
return User.create(data);
};
以下是上述功能的路线信息:
router.post('/', async ctx => {
const data = ctx.request.body;
console.log('data: ', data);
const user = await controller.add({
data
});
ctx.body = user;
});
这是我调用此函数的代码的相关部分:注意,我确实看到console.log数据行正在运行,所以我知道该函数正在被调用。但是无论出于什么原因,data
仍然是一个空对象(默认值),即使我通过了用户文档的JSON版本:
let formattedUser = new User();
formattedUser = JSON.stringify(userProfile);
console.log('formattedUser: ', formattedUser); // I see this in my console
try {
let createdUser = await UserCtlr.add(formattedUser);
console.log('createdUser: ', createdUser); // this DOES NOT print to the console
} catch (error) {
console.log(error);
}
我很困惑,因为在将formattedUser
函数传递给add()
函数之前,我可以看到add()
被打印到控制台。但是add()
函数在运行时似乎只包含一个空对象(默认值)。顺便说一句,即使我将其封装在try / catch中,也不会出现任何错误。
另一个说明,我可以成功使用Postman调用此public class HomeFragment extends Fragment {
BottomNavigationView bottomNavigationView;
FragmentManager manager = getFragmentManager() ;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_home,container,false);
}
@Override
public void onStart() {
super.onStart();
bottomNavigationView = bottomNavigationView.findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(navListener);
}
private BottomNavigationView.OnNavigationItemSelectedListener navListener=
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
Fragment selectedFragment = null;
switch (menuItem.getItemId()){
case R.id.nav_home1 :
selectedFragment = new Home1Fragment();
break;
case R.id.nav_favourites :
selectedFragment = new FavouriteFragment();
break;
case R.id.nav_search:
selectedFragment = new SearchFragment();
break;
}
manager.beginTransaction().replace(R.id.fragment_container,selectedFragment).commit();
return true;
}
};
}
函数并将用户保存到数据库。所以我不清楚为什么我以编程方式调用它时不起作用。我在这里想念什么?
答案 0 :(得分:0)
在控制器文件中,您将返回从用户模式创建的对象,但不将该对象保存到数据库中。请尝试返回以下内容:
User.create(data).save();
答案 1 :(得分:0)
在您的控制器文件中。然后您创建了formattedUser
,可以尝试:
formattedUser.save(function (err, createdUser) {
if (err) return console.error(err);
console.log(createdUser); //If created success
});