Knex de NodeJS et de l'insertion dans la base de données
Je suis nouveau sur nodejs et tente de mettre en place un serveur d'API, voici ma première tentative. Je voulais utiliser mysql au lieu de mongo db.
Mon problème est que " knex ("l'utilisateur").insert({email: req.corps.email}); " ne semble pas vouloir enregistrer dans la base de données.
var dbConfig = {
client: 'mysql',
connection: {
host : 'localhost',
user : 'root',
password : '',
database : 'db_nodeapi'
}
};
var express = require('express'); //call express
var bodyParser = require('body-parser'); //call body-parser
var knex = require('knex')(dbConfig); //set up database connection
var app = express(); //define our app using express
app.use(bodyParser.urlencoded({ extended: true })); //configure app to use bodyParser()
app.use(bodyParser.json()); //this will let us get the data from a POST
var router = express.Router(); //get an instance of the express Router
router.use(function(req, res, next) { //middle ware for authentication
console.log(' -Logging- ');
next(); //continue to next route without stopping
});
router.get('/', function(req, res) { //listen for a post on root
res.json({ message: ' -Success- ' });
});
router.route('/user') //set up user route
.post(function(req, res) { //listen for a post on user
console.log(' -Post -'); //report a post
knex('user').insert({email: req.body.email}); //insert user into user table
res.json({ success: true, message: 'ok' }); //respond back to request
});
app.use('/api', router); //register routes beginning with /api
var port = process.env.PORT || 8080; //set server port number
app.listen(port); //setup listener
console.log('Magic happens on port ' + port); //report port number chosen
Problème est que je ne peux pas obtenir knex à ajouter à la base de données!
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL,
`email` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
Ici est la base de données
- 1) êtes-vous sûr un e-mail devient-elle affichée? Qu'advient-il si vous modifiez la ligne de la console.log ("Post -") à la console.log ("Post -' + req.corps.e-mail) ? 2) Êtes-vous sûr que c'est la syntaxe pour les insérer? Il ne ressemble pas à la documentation actuelle, qui utilise quelque chose de plus comme knex.insert(info).dans('utilisateur')
- req.corps.le courrier électronique est définie à l'affiche de la valeur de l'e-mail, j'ai vérifié. corps de l'analyseur prend soin de cela, je suis amené à croire.
- Ok, so far so good. Maintenant, quels sont les knex? Êtes-vous sûr que la syntaxe de la requête fonctionne? Par exemple, si vous supprimez le code de la route et ajouter une ligne rapide après vous avez besoin de knex (quelque chose comme): knex ("l'utilisateur").insert({email:'[email protected]'}); ce qui se passe? Et puis ce qui se passe si vous ajoutez une deuxième ligne comme knex.insert({email: '[email protected]}).dans('utilisateur') est-ce que le travail?
- knex.insert({email: req.corps.email}).dans('utilisateur'); essayé rien, pas même une erreur. Aussi essayé knex ("l'utilisateur").insert({email:'[email protected]'}); var après knex = ... ligne. rien. Essayé knex.insert({email: '[email protected]}).dans('utilisateur') ... rien. Essayé les deux ... rien.
- Hmm. Il se pourrait que knex n'est pas de la connexion à la base de données, ou peut-être qu'il ne fonctionne pas en mode silencieux. l'id est spécifié comme not null - est-il lié à une séquence ou d'un auto-incrément ou quelque chose? Ou est-il possible c'est un point de rupture? BTW - vous pouvez ajouter un 'debug: true," à votre dbConfig avoir la syntaxe SQL et des liaisons de paramètres de sortie de la console. Ce serait utile.
- J'ai enlevé l'id complètement, la pensée qui allait l'aider ... debug: true vais essayer. Code trop long à poster.
- Essayé de configurer un compte d'utilisateur pour la table, juste au cas où le mot de passe ne peut pas être vide. - rien.
- Laissez-nous continuer cette discussion dans le chat.
Vous devez vous connecter pour publier un commentaire.
Le problème dans ton code, c'est qu'il vous manque le ".ensuite," la déclaration, ce qui provoque l'exécution du code.
Qui devrait fonctionner. Depuis knex.js s'insérer une fonction est une promesse, que vous devez appeler .alors() réellement l'appeler.
insert
retourne régulièrement promesse).Quelqu'un a déjà donné une solution. Je suis ici pour parler de pourquoi l'ajout d'un puis déclaration peut résoudre ce problème.
En fait, puis, attraper déclaration sont à la fois ok. Veuillez vous référer à la knex documentation(http://knexjs.org/#Interfaces-then), qui mentionne:
Donc sélectionnez, mise à jour, insérer, etc. sont juste de l'instruction de requête builder, vous devez utiliser puis ou attraper à le convertir à la promesse de l'état.
Exemples sont comme suit:
Eu le même problème une fois, essayez ceci: