2017-06-22 12 views
0

Node.js、express、およびMongoDBを使用してRESTバックエンドを作成しようとしていますが、何らかの理由でPUT呼び出しを作成する際に問題が発生しています。問題はapp.post( '/ contacts/add'、contacts.addContacts)です。GETに変更するとうまく動作しますが、PUTまたはPOSTに変更するとエラーが発生します.GET/contacts/add anyアイデア?Node.js GETでExpress POSTコールが動作しない

私は、MongoDBの3.4.5および4.2.0 NPM

server.js急行4.15.3を使用しています:私はしませんでした

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アプリケーション/ jsonの使用を知っているかもしれません。特定のシナリオでは、多くのアプリケーションが使用されます。 – samanime

関連する問題