Node.js / mongoose:undefined不是函数

时间:2016-04-16 03:31:57

标签: javascript node.js mongodb mongoose

我有这个MEAN应用程序,用户可以上传他们的照片。以下是其中的路线:

var express = require('express');
var router = express.Router();
var passport = require('passport');
var User = require('../models/user');
var Verify = require('./verify');
var multiPart = require('connect-multiparty');
var multiPartMiddleWare = new multiPart();
var fs = require('fs-extra');
var path = require('path');

  router.post('/edit', multiPartMiddleWare ,function(req, res) {
  var file = req.files.file;
  theuser = req.body.username;
  console.log("User " + theuser + "..." + file);

  var uploadDate = new Date();
  console.log(file.path + '\n')
  var tempPath = file.path;
  var finalPath = path.join(__dirname, "../userphotos/", theuser + file.name);
  console.log(finalPath);
  var savePath = "/userphotos/" + theuser + uploadDate + file.name;

  fs.rename(tempPath, finalPath, function (err){
       if (err){
           console.log(err)
       } else {
           User.find({"username":theuser}, function(err, userData){
               var userd = userData;
               userd.image = savePath;
               console.log('\n' + userd + '\n'); // the userd is proper
               userd.save(function(err){ //Error occurs HERE
                   if (err){
                       console.log("Error whilst saving file: " + err)
                       res.json({status: 500})
                   } else {
                       console.log("Image saved");

                       res.json({status: 200})
                    }
                  })
              })
          }
      })   
});

图像会保存到我的临时文件夹以及目的地。但是,当我尝试将源保存到用户文档时,我得到undefined is not a function

这是我的猫鼬路线:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var passportLocalMongoose = require('passport-local-mongoose');

var User = new Schema({
    username: {
        type: String,
        unique: true
    },
    password: String,
    image:   {
        type: String
    },
    bio:   {
        type: String
    }
});

User.plugin(passportLocalMongoose);

module.exports = mongoose.model('User', User);

如何解决此问题?

3 个答案:

答案 0 :(得分:1)

我认为你在这里使用了错误的功能:

User.find({"username":theuser}, function(err, userData){ ...

尝试

User.findOne({"username":theuser}, function(err, userData){ ...

答案 1 :(得分:1)

您正在使用返回数组的User.find(),因此您无法save它。您可以使用userData[0]从数组中获取第一个User,或者只使用User.findOne(),这也将返回匹配的第一个User

答案 2 :(得分:0)

将此var userd = userData;更改为var userd = userData[0];。 userData得到了几个文档的数组(可能只包含一个doc数组),因此需要一个文档来进行修改。