使用Mongoose Create()函数无法保存文档

时间:2019-10-06 12:10:28

标签: node.js mongodb mongoose

我有一些代码来生成用户配置文件,然后尝试使用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; } }; } 函数并将用户保存到数据库。所以我不清楚为什么我以编程方式调用它时不起作用。我在这里想念什么?

2 个答案:

答案 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
    });