虽然GET有,但Node.js Express POST调用不起作用

时间:2017-06-22 20:17:32

标签: javascript node.js mongodb npm

我正在尝试使用Node.js,express和MongoDB编写REST后端,但由于某种原因,我遇到了一些创建PUT调用的问题。问题在于app.post(' / contacts / add',contacts.addContacts),因为它可以正常工作,如果我将其更改为GET但是当我将其更改为PUT或POST时我得到错误无法获取/ contacts / add任何想法?

我使用快递4.15.3,mongodb 3.4.5和npm 4.2.0

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 个答案:

答案 0 :(得分:0)

我没有发现代码的任何问题。

使用body-parser作为JSON时,您可能会遇到一个非常常见的陷阱。您的请求必须在解析器请求中指定Content-Type: application/json。否则,它就不会起作用。

如果不能解决问题,如果您可以共享任何错误消息或响应代码,则可能会出现另一个问题。