获取 404 尝试使用 Node Express Postgresql 的 http PUT



编辑:没关系 - 我在 Angular 服务中犯了一个小错误。我的坏。

我试图通过使用angular,Node and Express以及PostgreSql构建一个简单的CMS来自学更多的后端。我想出了如何实现除UPDATE之外的所有CRUD功能。我以为我明白该怎么做,但我无法弄清楚我哪里出错了。我一直得到404。我误解了什么或走错了路?我知道这很简单,但我很新,所以任何帮助了解我感到困惑的地方都非常感谢。以下是相关代码:

.HTML

<form ng-submit="updateBlogEntry(specificBlog.id, specificBlog.title, specificBlog.author, specificBlog.imageurl, specificBlog.content)">
    <h2>Title:</h2>
        <input type="text" ng-model="specificBlog.title"></input>
      <br>
    <h3>Author:</h3>
        <input type="text" ng-model="specificBlog.author"></input>
      <br>
    <h3>Photo:</h3>
        <input type="text" ng-model="specificBlog.imageurl"></input>
      <br>
    <h3>Content:</h3>
      <textarea type="text" rows="5" cols="50" ng-model="specificBlog.content">
      </textarea>
      <br>
    <button type="submit">Save Changes</button>
  </form>

角度控制器

  var id = $stateParams.id;
  var title = $stateParams.title;
  var author = $stateParams.author;
  var imageurl = $stateParams.imageurl;
  var content = $stateParams.content;
  $scope.updateBlogEntry = function(id, title, author, imageurl, content) {
    adminService.updateBlogEntry(id, title, author, imageurl, content);
  }

角度服务

this.updateBlogEntry = function(id, title, author, imageurl, content) {
    return $http({
      method: 'PUT',
      url: 'updateBlogEntry/' + id,
      data: {
        id: id,
        title: title,
        author: author,
        imageurl: imageurl,
        content: content
      }
    })
    .success(function(data) {
      alert("Entry Updated");
    })
    .error(function(data) {
      alert("Error Updating"); 
    })

服务器索引

// EXTERNAL MODULES //
var express = require('express');
var bodyParser = require('body-parser');
var session = require('express-session');
var massive = require('massive');
// CONFIG //
var config = require('./config');
// EXPRESS //
var app = module.exports = express();
app.use(express.static(__dirname + './../dist'));
app.use(bodyParser.json());
// MASSIVE //
var massiveUri = config.MASSIVE_URI;
var massiveServer = massive.connectSync({
    connectionString: massiveUri
});
app.set('db', massiveServer);
var db = app.get('db');
var dbSetup = require('./services/dbSetup');
dbSetup.run();
// CONTROLLERS //
var userCtrl = require('./controllers/userCtrl');
var blogCtrl = require('./controllers/blogCtrl');

// Blog Endpoints //
app.post('/api/createBlogEntry', blogCtrl.createBlogEntry);
app.get('/api/getBlogEntries', blogCtrl.readBlogEntries);
app.get('/api/getBlogEntry/:id', blogCtrl.readBlogEntry);
// BUG Why isn't this working?
app.put('/api/updateBlogEntry/:id', blogCtrl.updateBlogEntry);
// CONNECTIONS //
var port = config.PORT;
app.listen(port, function() {
    console.log('Listening on port ' + port);
});

节点控制器

updateBlogEntry: function(req, res, next){
        db.blogs.blog_update([
            req.params.id,
            req.body.title,
            req.body.author,
            req.body.imageurl,
            req.body.content
        ],
        function(err, results){
            if (err){
                console.error(err);
                res.send(err);
            } else {
                res.send(results[0]);
            }
        })
    }

blog_update.sql

UPDATE blogs
set
  title     = COALESCE($2, title),
  author    = COALESCE($3, author),
  imageurl  = COALESCE($4, imageurl),
  content   = COALESCE($5, content)
WHERE id = $1
RETURNING * ;

控制台中的错误:

angular.js:11881 PUT http://localhost:3000/updateBlogEntry/1 404 (Not Found)

你写错了你的网址。

它应该是/api/updateBlogEntry 根据你的节点的快速路由。

更改此部分

` url: 'updateBlogEntry/' + id,` 

它应该是

url: '/api/updateBlogEntry/' + id,

最新更新