J'apprends à utiliser un backend alors pardonnez-moi si c'est élémentaire, il semble que je manque quelque chose de simple. J'essaie de créer une simple application CRUD pour apprendre, j'ai donc choisi de créer une plate-forme de blog que je peux incorporer dans mon site Web plus tard. J'utilise Angular, Node et Express, et PostgreSql.Impossible d'obtenir une alerte() pour mettre en ligne avec succès à la base de données
Je peux poster des entrées dans la base de données avec succès. Je peux les voir sur Postico quand je clique sur Entrée. Je ne peux pas sembler comprendre comment déclencher une alerte qui notifie si l'entrée a été affichée avec succès ou non. En ce moment j'ai l'alerte dans le service angulaire sur un .success etc., mais j'ai le sentiment que c'est faux. Quand je cherchais la réponse ici, d'autres personnes l'avaient dans le contrôleur mais j'ai essayé et cela n'a pas fonctionné.
Voici le code correspondant je:
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 Le contrôleur angulaire
angular.module("blog").controller("createEntryCtrl", function($scope, adminService) {
$scope.createBlogEntry = function(blog){
adminService.createBlogEntry(blog);
}
});
adminService.js Le service angulaire:
angular.module("blog").service("adminService", function($http) {
this.createBlogEntry = function (blog) {
$http.post('/api/createBlogEntry', blog)
.success(function(data) {
alert("Entry Posted");
})
.error(function(data) {
alert("Error in Posting");
})
}
});
index.js L'Index Server (moins paramètres non pertinents)
// 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 Contrôleur de nœud:
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 Le Sql:
INSERT INTO blogs (title, author, imageUrl, content)
VALUES ($1, $2, $3, $4)
Merci pour la réponse, je l'apprécie. Cela a fonctionné, alert() se déclenche maintenant et enregistre dans la base de données! Avez-vous toujours besoin de res.send (200) pour .success au travail? Cela aurait du sens – Diego
Normalement dans les applications de crud après avoir sauvegardé un élément dans un db (cela signifie une insertion ou une mise à jour), s'il n'y a pas d'erreur, la réponse est l'élément (que vous envoyez) j'envoie ? car après une opération dans un db, l'item pourrait être modifié en ajoutant de nouveaux paramètres (ej: id, timestamp, etc), et ces paramètres pourraient être utiles à la vue (ej: ordonner une liste d'items par timestamp, fourni en db), faire un res.send (blog) son envoyer par défaut un statut de code 2xx, il n'est donc pas nécessaire d'appeler res.send (200) –