Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么mongoose中的save()不是函数?_Node.js_Mongodb - Fatal编程技术网

Node.js 为什么mongoose中的save()不是函数?

Node.js 为什么mongoose中的save()不是函数?,node.js,mongodb,Node.js,Mongodb,我正在使用Node.js、Mongoose、MongoDb、express开发一个应用程序 我有两个模式,一个用于学生,一个用于片段。我用的是人口模型。我可以创建一个用户,创建一个代码段并将其链接到该用户。但我无法在用户集合中链接和保存代码段 如何链接和保存用户,使其可以引用其代码段 用户和代码段模式 var userSchema = Schema({ name: { type: String, required: true, unique: true }, passwo

我正在使用Node.js、Mongoose、MongoDb、express开发一个应用程序

我有两个模式,一个用于学生,一个用于片段。我用的是人口模型。我可以创建一个用户,创建一个代码段并将其链接到该用户。但我无法在用户集合中链接和保存代码段

如何链接和保存用户,使其可以引用其代码段

用户和代码段模式

var userSchema = Schema({
       name: { type: String, required: true, unique: true },
     password: { type: String, required: true },
    snippet: [{ type: Schema.Types.ObjectId, ref: 'Snippet' }]
    })

   var snippetSchema = Schema({
   user: {type: Schema.Types.ObjectId, ref: 'User'},
    title: String,
   body: String,
    createdAt: {
    type: Date,
   require: true,
    default: Date.now
     }
    })
这就是我保存代码段的方式,我将其添加到user.save()函数中,这样它可以保存代码段ref,但会给我user.save()不是函数错误

   var name = request.session.name.name
   User.find({ name: name }).then(function (user) {
    if (user) {
      console.log('====================')
      console.log(user)
      user.save().then(function () {    // problem is here? 
        var newSnippet = new Snippet({
          user: user._id,
          title: title,
          body: snippet
        })

        newSnippet.save().then(function () {
          // Successful
          console.log('success')

          response.redirect('/')
        })
      })
    }
  }).catch(function (error) {
    console.log(error.message)
    response.redirect('/')
  })
但是,我实际上得到了打印后,搜索它的对象

[ { _id: 5a2e60cf290a976333b19114,
name: 's',
password: '$2a$10$vD3EaQly4Sj5W3d42GcWeODuFhmHCSjfAJ1YTRMiYAcDBuMnPLfp6',
__v: 0,
snippets: [] } ]

您需要使用
User.findOne
来获取有效的用户对象,这里是一个数组。另外,不要忘了总是在你的承诺中回报一些东西(或者抛出一个错误)

下面是对函数的快速重写。通过一些改进,如箭头函数、常量和扁平承诺链(从不在另一个
中使用任何
.then
),并避免代码重复

const name = request.session.name.name
User.findOne({ name })
  .then(user => {
    if (user) return user.save()

    // What to do if not found? Throw an error?
    throw new Error('User not found')
  })
  .then(() => {
    const newSnippet = new Snippet({
      user: user._id,
      title: title,
      body: snippet,
    })

    return newSnippet.save()
  })
  .catch((error) => console.log(error.message))
  .then(() => response.redirect('/'))

您需要使用
User.findOne
来获取有效的用户对象,这里是一个数组。另外,不要忘了总是在你的承诺中回报一些东西(或者抛出一个错误)

下面是对函数的快速重写。通过一些改进,如箭头函数、常量和扁平承诺链(从不在另一个
中使用任何
.then
),并避免代码重复

const name = request.session.name.name
User.findOne({ name })
  .then(user => {
    if (user) return user.save()

    // What to do if not found? Throw an error?
    throw new Error('User not found')
  })
  .then(() => {
    const newSnippet = new Snippet({
      user: user._id,
      title: title,
      body: snippet,
    })

    return newSnippet.save()
  })
  .catch((error) => console.log(error.message))
  .then(() => response.redirect('/'))

您看到的确切错误消息是什么?user.save()不是函数。您看到的确切错误消息是什么?user.save()不是函数。