2016-04-16 11 views
0

Ich habe diese MEAN App, in der die Benutzer ihr Foto hochladen können. Hier ist die Route dafür:Node.js/mongoose: undefined ist keine Funktion

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

Das Bild wird in meinem Temp-Ordner sowie das Ziel gespeichert. Wenn ich jedoch versuche, die Quelle in das Benutzerdokument zu speichern, erhalte ich eine undefined is not a function.

Hier ist meine Mungo Route:

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); 

Wie kann ich dieses Problem beheben?

Antwort

1

Ich glaube, Sie verwenden hier falsch Funktion:

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

Versuchen

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

Sie verwenden User.find(), die ein Array zurückgibt, und daher kann man nicht save es. Sie können userData[0] verwenden, um die erste User aus dem Array zu erhalten, oder einfach User.findOne() verwenden, die auch die erste User entspricht.

0

Ändern Sie diese var userd = userData; zu var userd = userData[0];. userData hat ein Array von mehreren Dokumenten (kann nur ein Dokument im Array enthalten), also muss man ein Dokument bekommen, um Änderungen vorzunehmen.

Verwandte Themen