2017-05-17 5 views
1

Ich verwende Versprechen und Senden der Antwort, aber mit in der. Then() - Funktion kann ich die Antwort nicht senden res.send();res.send() funktioniert nicht im Knoten

Mein Code ist

 var express = require ('express'); //EXPRESS Package 
 
    var bodyParser = require('body-parser');// get body-parser 
 
    var route = express.Router(); \t //define our app using express 
 
    var multer = require('multer'); 
 
    var validator = require('validator'); 
 
    var userModel = require('../../model/user.model'); 
 
    var session = require('express-session'); 
 
    route.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded 
 
    route.use(bodyParser.json()); // for parsing application/json 
 
    // route.use(bodyParser.json({ type: 'application/vnd.api+json' })) 
 

 
    route.put("/personal/:id", function (req, res) { 
 

 
     data = {}; 
 
     data['personal_details'] = req.body; 
 
     return userModel.update(req.params.id, data).then(function (result) { 
 
      // console.lssog(result); 
 
      res.send(); 
 
     }).catch(function (err){ 
 

 
      res.send(err).status(400); 
 
     }); 
 
    }); 
 

 
    // route.put("/contact/:id", function (req, res) { 
 

 
    //  userModel.update(req.params.id, "contact_details", req.body).then(function() { 
 
      
 
    //   res.sendStatus(200) 
 
    //  }).catch(function (err){ 
 

 
    //  res.send(err).status(400); 
 
    //  }); 
 
    // }); 
 
    module.exports = route;

Benutzer Modelldatei user.model.js ist, die unten gezeigt wird:

var passwordHash = require('password-hash'); 
 
var mongo = require('mongoskin'); 
 
var Q = require('q'); 
 
var _ = require('lodash'); 
 
var randomstring = require('randomstring'); 
 
var db = mongo.db('mongodb://127.0.0.1/angulardemo'); 
 

 
db.bind('demotest'); 
 
// var hash = bcrypt.hashSync("12345", salt); 
 
var model  = {}; 
 
model.login  = login; 
 
model.create = create; 
 
model.update = update; 
 
model.destroy = destroy; 
 
model.edit  = edit; 
 

 
module.exports = model; 
 

 
/** 
 
* Create new user 
 
* @param {request data} userData 
 
*/ 
 
function create (userData){ 
 
    
 
    var deferred = Q.defer(); 
 

 
    db.demotest.findOne({"email" : userData.email}, function (err, user) { 
 
     if (err) deferred.reject(err); 
 

 
     if(user){ 
 

 
      deferred.reject('Email "' + userData.email + '" is already taken'); 
 
     } 
 
     else{ 
 

 
      createUser(); 
 
     } 
 
    }); 
 
    
 
    function createUser() { 
 

 
     var user = _.omit(userData, ['password', 'c_password']); 
 
     var hashedPassword = passwordHash.generate(userData.password); 
 
     user.password = hashedPassword; 
 
     user.api_token = randomstring.generate(50); 
 
     user.registration_code = randomstring.generate(10); 
 
     user.is_active = 1; 
 
     user.is_verified = 1; 
 
     db.demotest.insert(user, function (err, doc) { 
 

 
      if (err) deferred.reject(err); 
 

 
      deferred.resolve(); 
 
     }); 
 
    } 
 

 
    return deferred.promise; 
 

 
} 
 

 
/** 
 
* Login user 
 
* @param {user request data} data 
 
*/ 
 
function login(data) { 
 
    
 
    var deferred = Q.defer(); 
 

 
    db.demotest.findOne({"email" : data.email}, function (err, user) { 
 

 
     if (err) deferred.reject(err); 
 

 
     if(!user) deferred.reject("User not found"); 
 
     if(user && passwordHash.verify(data.password, user.password)){ 
 

 
      deferred.resolve(user); 
 
     } 
 
     else{ 
 

 
      deferred.reject("Invalid Credential"); 
 
     } 
 
    }); 
 

 
    return deferred.promise; 
 
} 
 
/** 
 
* Update User 
 
* @param {user id} id 
 
* @param {user data} data 
 
*/ 
 
function update(id, data){ 
 
    
 
    var deferred = Q.defer(); 
 
    // validation 
 
    db.demotest.findById(id, function (err, user) { 
 
     if (err) deferred.reject(err); 
 

 
     if (user.id !== id) { 
 
      // username has changed so check if the new username is already taken 
 
      db.demotest.findOne(
 
       { _id: id }, 
 
       function (err, user) { 
 
        if (err) deferred.reject(err); 
 

 
        if (user) { 
 
         // username already exists 
 
         deferred.reject('User "' + user.username + '" is already taken') 
 
        } else { 
 
         updateUser(); 
 
        } 
 
       }); 
 
     } else { 
 
      updateUser(); 
 
     } 
 
    }); 
 

 
    function updateUser() { 
 

 
     db.demotest.update(
 
      { _id: mongo.helper.toObjectID(id) }, 
 
      { $set: data }, 
 
      function (err, doc) { 
 
       if (err) deferred.reject(err); 
 
       deferred.reject("err"); 
 
      }); 
 
    } 
 

 
    return deferred.promise; 
 

 

 

 

 

 
    // var deferred = Q.defer(); 
 
    // db.demotest.update({_id : mongo.helper.toObjectID(id)}, {$set: data}, function (err, result) { 
 
    //  console.log(result); 
 
    //  if (err) deferred.reject(err); 
 

 
    //  deferred.resolve("OLLLL"); 
 

 
    // }); 
 

 
    // return deferred.promise; 
 
} 
 

 
function destroy() { 
 

 
} 
 

 
function edit() { 
 
    
 
} 
 

 

 

 

 

 
// var insertTestDoc = function (db, callback) { 
 
//  //console.log("one"); return ; 
 
//  var collection = db.collection('demotest'); 
 

 
//  collection.insertOne({"title" : "demotest", "description" : "Lorem Ipsum Sit Emet.", "password" : hash}, function (err, db){ 
 
//   assert.equal(err, null); 
 
//   callback(); 
 
//  }); 
 

 
// } 
 
// var login = function (db, callback) { 
 

 
//  var collection = db.collection('demotest') 
 

 
//  var cursor = collection.findOne({"title" : "demotest"}); 
 
//  console.log(cursor); 
 
// //  cursor.each(function(err, doc) { 
 
// //  assert.equal(err, null); 
 
// //  if (doc != null) { 
 
// //   console.log(doc); 
 
// //  } else { 
 
// //   callback(); 
 
// //  } 
 
// // }); 
 
// } 
 
// MongoClient.connect('mongodb://localhost/angulardemo', function (err, db){ 
 

 
//  assert.equal(null, err); 
 
//  console.log("Connected to the server correctly"); 
 
//  login(db, function() { 
 
//   db.close(); 
 
//  }); 
 
//  // insertTestDoc(db, function() { 
 
//  //  db.close(); 
 
//  // }); 
 

 
// });

Bitte ein ssist thanks

+1

Was passiert stattdessen? – Paul

+0

Keine Antwort bekommen. Es steht aus. –

Antwort

0

Ich kann mir zwei Möglichkeiten vorstellen, basierend auf dem, was Sie gezeigt haben, von denen eine hängt von der Version von Mungo Sie verwenden. Eigentlich ist die Verwendung von Mungo eine Voraussetzung für mich, da Sie es nie erwähnen ...

Je wahrscheinlicher ist, dass Sie nie tatsächlich eine Verbindung zur Datenbank herstellen. In Ihrem Code muss irgendwo ein Anruf an mongoose.connect() oder mongoose.createConnection() sein, der beim Start der App ausgelöst wird (oder mindestens, bevor die Anfrage aufhört, die Sie sehen).

Wenn Sie das tatsächlich tun und es nicht teilen, dann ist die nächste wahrscheinlichste Sache, dass Sie eine Version von Mungo vor 4.0 verwenden, in der Abfragen (z. B. .update()) nicht folgen Versprich api, und man mußte rufen exec() wie:

myModel.findOneAndUpdate(req.params.id, data).exec().then(...); 

wenn ich in meiner Annahme über Mungo falsch bin, oder wenn beide meine Vorschläge falsch sind, bitte aktualisieren Sie Ihre Frage mit den entsprechenden Informationen.

+0

Danke für deine Antwort, aber ich benutze mongoskin –