2017-05-11 6 views
1

私はバックエンドの使い方を学んでいますので、これが初心者の場合は許してください。私は学ぶためにシンプルなCRUDアプリケーションを作成しようとしていますので、私は自分のウェブサイトに後で取り入れることができるブログプラットフォームを作りました。データベースに正常にポストすると警告()が発せられません

私はAngular、Node、Express、PostgreSQLを使用しています。

私は正常にデータベースにエントリを投稿できます。私はEnterをクリックするとPosticoでそれらを見ることができます。エントリーがうまく投稿されたかどうかを通知する警告を発する方法を見つけられないようです。今、私はアンサーサービスでアラートを出していますが、私はそれが間違っていると感じています。私がここで答えを探していたときに、他の人がコントローラーにそれを持っていましたが、私はそれを試みましたが、うまくいきませんでした。

createEntry.html

<form ng-submit="createBlogEntry(blog)"> 
    <h2>Title:</h2> 
     <input type="title" ng-model="blog.title"></input> 
    <br> 
    <h3>Author:</h3> 
     <input type="author" ng-model="blog.author"></input> 
    <br> 
    <h3>Photo:</h3> 
     <input type="imageUrl" ng-model="blog.imageUrl"></input> 
    <br> 
    <h3>Content:</h3> 
    <textarea type="content" rows="5" cols="50" ng-model="blog.content"> 
    </textarea> 
    <br> 
    <button type="submit">Save Entry</button> 
    </form> 

createEntryCtrl.js 角度コントローラ

angular.module("blog").controller("createEntryCtrl", function($scope, adminService) { 

    $scope.createBlogEntry = function(blog){ 
     adminService.createBlogEntry(blog); 
    } 

}); 

adminService.js 01:

は、ここで私が持っている、関連するコードです角度サービス:

angular.module("blog").service("adminService", function($http) { 

this.createBlogEntry =関数(ブログ){

$http.post('/api/createBlogEntry', blog) 
    .success(function(data) { 
     alert("Entry Posted"); 
    }) 
    .error(function(data) { 
     alert("Error in Posting"); 
    }) 
    } 

}); 

index.js サーバインデックス(マイナス無関係エンドポイント)

// 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); 

// CONNECTIONS // 
var port = config.PORT; 
app.listen(port, function() { 
    console.log('Listening on port ' + port); 
}); 

blogCtrl.js ノードコントローラ:

var app = require('./../index'); 
var db = app.get('db'); 

module.exports = { 

createBlogEntry: function(req, res, next) { 
    console.log(res); 
    var blog = req.body; 
    db.blogs.blog_create([blog.title, blog.author, blog.imageUrl, blog.content], function(err, blog) { 
     if (err) { 
      return res.status(500).send(err); 
     } 
    }) 
    } 

}; 

blog_create.sql SQL:

INSERT INTO blogs (title, author, imageUrl, content) 
VALUES ($1, $2, $3, $4) 

答えて

0

db.blogs.blog_create([blog.title, blog.author, blog.imageUrl, blog.content], function(err, blog) { 
    if (err) { 
     return res.status(500).send(err); 
    }else{ 
     res.send(200); //Everything is ok ! 
    } 
}); 

・ホープこのヘルプ! そして、私の英語のために申し訳ありません!

+0

ありがとう、私はそれを感謝します。 これでうまくいきました。alert()が起動し、データベースに保存されます。 .successが機能するためには、常にres.send(200)する必要がありますか?それは意味をなさないでしょう – Diego

+0

通常、アイテムをdbに保存した後(クッキーの挿入または更新を意味します)、エラーがなければレスポンスはアイテム(保存するために送信するアイテム)ですが、私は送る ? DBへの操作後にアイテムに新しいパラメータ(ej:id、timestampなど)を追加して変更することができ、これらのパラメータはビュー(ej:タイムスタンプでアイテムのリストを並べ替え、dbで提供)に役立つ。 res.send(ブログ)はデフォルトで2xxのコードステータスを送信するので、必要ではありませんres.send(200) –

0

あなたのサービスがPromiseを返すことができます。そう、あなたはそのように行うことができます:

adminService.js:

変更この:コントローラ

return $http.post('/api/createBlogEntry', blog); 

そして、あなたで:

$http.post('/api/createBlogEntry', blog) 
     .success(function(data) { 
      alert("Entry Posted"); 
     }) 
     .error(function(data) { 
      alert("Error in Posting"); 
     }) 
     } 
    }); 

angular.module("blog").controller("createEntryCtrl", function($scope, adminService) { 

    $scope.createBlogEntry = function(blog){ 
     var promise = adminService.createBlogEntry(blog); 
     promise.then(
      function(res) { alert("Entry Posted"); }, 
      function(res) { alert("Error in Posting"); }     
     ); 
    } 

}); 

あなたはアングで約束を見ることができますlar here

これはあなたの話ですか?

お手数ですがお手伝いします。 :-)あなたはこれを試してみてください

をトリガーするの2xxコードのステータスを受ける必要がある成功で

+0

ありがとう、私は約束を勉強し、それは私の頭の上に行きました。 もう1人のコメント者は、私が仕事をするためのres.send(200)が不足していると指摘しました。それはうまくいったし、あなたの解決策も.then約束だが、代わりに約束を使用する利点は何か? – Diego

関連する問題