12

私はnodejsを初めて使用し、APIサーバーをセットアップしようとしていました.これが私の最初の試みです. mongo db の代わりに mysql を使いたかったのです。

私の問題は、「knex('user').insert({email: req.body.email});」データベースに保存したくないようです。

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

問題は、knex をデータベースに追加できないことです!

CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL,
  `email` varchar(255) NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

データベースはこちら

4

3 に答える 3

26

コードの問題は、コードの実際の実行を引き起こす ".then" ステートメントがないことです。

   knex('user').insert({email: req.body.email})
      .then( function (result) {
          res.json({ success: true, message: 'ok' });     // respond back to request
       })

それはうまくいくはずです。knex.js の挿入関数は promise であるため、実際に呼び出すには .then() を呼び出す必要があります。

于 2016-03-21T08:40:39.710 に答える
1

同様の問題が一度あった場合は、これを試してください:

//...
router.route('/user').post(function(req, res) {                          
  knex('user').insert({email: req.body.email}).then(function(ret){
    res.json({ success: true, message: 'ok'/*,ret:ret*/});  
  });   
});
//...
于 2015-09-27T05:09:41.600 に答える