2013-09-03 9 views
8

Próbuję zaimplementować funkcję aktualizacji do aplikacji Express.js i chcę użyć żądania PUT do wysłania nowych danych, ale ciągle otrzymuję błędy za pomocą PUT. Z tego co przeczytałem, to tylko kwestia użycia app.put, ale to nie działa. Mam następujących w moim pliku trasach:Używanie metody PUT z Express.js

send = function(req, res) { 
    req.send(res.locals.content); 
}; 

app.put('/api/:company', function(res,req) { 
    res.send('this is an update'); 
}, send); 

Gdy używam listonosza, aby złożyć zamówienie mówiąc, dostaję „nie można umieścić/api/Petshop” jako błąd. Nie rozumiem, dlaczego nie mogę PUT, lub co jest nie tak.

+1

jaki błąd występuje u listonosza, 500? 404? – wayne

+2

Czy próbowałeś użyć metody MethodOverride()? http://stackoverflow.com/a/8378414/918608 http://stackoverflow.com/a/14174177/918608 –

Odpowiedz

9

Być może brakuje Ci aktualnej funkcji aktualizacji. Ścieżka put zwraca wynik z powrotem do klienta, ale brakuje tej części, gdy informuje się bazę danych o aktualizacji danych.

Jeśli używasz MongoDB i wyrażenia, można napisać coś takiego:

app.put('/api/:company', function (req, res) { 
    var company = req.company; 

    company = _.extend(company, req.body); 

    company.save(function(err) { 
    if (err) { 
     return res.send('/company', { 
      errors: err.errors, 
      company: company 
     }); 
    } else { 
     res.jsonp(company); 
    } 

}); 

Ten mean stack project mogą pomóc, gdyż obejmuje tę funkcjonalność CRUD których używałem tutaj zamianę swoich artykułów dla swoich firm. takie samo.

+0

są argumentami 'req' i' res' w wywołaniu zwrotnym w niewłaściwej kolejności? Powinien być 'function (req, res)'? http://expressjs.com/api.html#app.put.method – Akurn

+0

@Akurn, tak powinno być wymagane res. – danilodeveloper

-3

Czy sprawdzałeś informacje o nagłówkach? Ponieważ nagłówek powinien być header['content-type'] = 'apllication/json';, wtedy tylko otrzymasz obiekt aktualizacji po stronie serwera (node-express), w przeciwnym razie, jeśli masz typ zawartości zwykły tekst/htm, to dostaniesz empty req.body w węźle.