2017-06-22 70 views
0

我想用Node.js,express和MongoDB编写REST后端,但由于某种原因,我有一些问题创建PUT调用。问题是与app.post('/ contacts/add',contacts.addContacts),因为它工作正常,如果我将它更改为GET,但当我将其更改为PUT或POST时,我得到的错误无法GET/contacts/add Any想法?Node.js Express POST调用不起作用,尽管GET做

我使用快递4.15.3,MongoDB的3.4.5和4.2.0 NPM

server.js:

var express = require('express'), 
    contacts = require('./routes/contacts'); 
    bodyParser = require('body-parser'); 

var app = express(); 

app.use(bodyParser.urlencoded({extended: true})); 
app.use(bodyParser.json()); 

app.get('/contacts/chalkboard/:id', contacts.getChalkboardContacts); 
app.get('/contacts/get/:uid', contacts.getContacts); 
app.post('/contacts/add', contacts.addContacts); 

app.listen(3000); 
console.log('Listening on port 3000...'); 

contacts.js

var mongo = require('mongodb'); 
mongo.BSONPure = require('bson').BSONPure; 

var Server = mongo.Server, 
    Db = mongo.Db, 
    BSON = mongo.BSONPure; 

var server = new Server('localhost', 27017, {auto_reconnect: true}); 
db = new Db('db', server); 


db.open(function(err, db) { 
    if(!err) { 
     console.log("Connected to database"); 
     db.collection('contacts', {strict:true}, function(err, collection) { 
      if (err) { 
       console.log("The 'contacts' collection doesn't exist. Creating it with sample data..."); 
       populateDB(); 
      } 
     }); 
    } 
}); 

exports.getChalkboardContacts = function(req, res) { 
    var uid = req.params.uid.toString(); 
    var date = new Date(); 
    var timeInMs = date.getMilliseconds(); 
    console.log(uid); 
    db.collection('contacts', function(err, collection) { 
     console.log('collection: ' + collection); 
     collection.find({uid: uid, lastMessage: {$gte: timeInMs}}).toArray(function(err, items) { 
      res.send(items); 
     }); 
    }); 
}; 

exports.getContacts = function(req, res) { 
    var uid = req.params.uid.toString(); 
    console.log(uid); 
    db.collection('contacts', function(err, collection) { 
     console.log('collection: ' + collection); 
     collection.find({uid: uid}).toArray(function(err, items) { 
      res.send(items); 
     }); 
    }); 
}; 

exports.addContacts = function(req, res) { 
    console.log('working'); 
    db.collection('contacts', function(err, collection) { 
     var id = "592159bc3e48764418170399"; 
     var contact = {uid: "592159bc3e48764418173333", 
       keyUid: "592159bc3e48764418171444", 
       name: "Billy Jean", 
       phoneNumber: "+491721894733", 
       battery: "47%", longitude: "0", 
       latitude: "0", 
       city: "city", 
       country: "country", 
       place: "place", 
       address: "address", 
       lastMessage: "lastMessage", 
       lastUpdated: "lastUpdated"}; 
     collection.update({'uid':id}, {$push:{'contacts':contact}}, function(err, result) { 
      if (err) { 
       console.log('Error updating contact: ' + err); 
       res.send({'error':'An error has occurred'}); 
      } else { 
       console.log('' + result + ' document(s) updated'); 
       res.send(result); 
      } 
     }); 
    }); 
}; 
+1

您的客户正在发出GET请求。您的客户端代码需要更新以发出“POST”请求。 –

回答

0

我没有发现任何代码立即出错。

对于JSON使用body-parser时,您可能会陷入非常常见的陷阱。您的请求必须指定Content-Type: application/json请求分析器解析它。否则,它将无法正常工作。

如果这样做不起作用,如果您可以共享任何错误消息或响应代码,它可能会说明另一个问题。

+0

谢谢你真的是来自客户端的请求的问题(我正在使用浏览器进行测试)。一旦我在Android应用程序中进行了API调用,它就可以正常工作。 –

+0

@RileyMacDonald它可能知道使用application/json。在某些情况下会有很多应用程序。 – samanime