0

Node モジュール KNEX を使用して MYSQL 呼び出しを行っています。ユーザーが独自のカスタム テーブルを追加できるようにしたい。すべての列を含むデータベースを MYSQL に追加できますが、コンソールで 500 内部サーバー エラーが発生します。

これは、MYSQL データベースにアクセスするカスタム ファイル knex.js です。

knex.js

var knex = require('knex')({
    client: 'mysql',
    connection: {
        host: 'localhost',
        user: USER,
        password: PASSWORD,
        database: 'tasks'
    }
});

exports.createUserTable = function(x){
    console.log(x);
    knex.schema.hasTable(x.id).then(function(exists) {
        if (!exists) {
            return knex.schema.createTable(x.id, function(t){
                t.increments();
                t.string(x.type, 50);
                for (var y in x.val){
                    t.string(x.val[y], 255);
                }
                t.timestamps();
            });
        } else {
            return console.log("Error!");
        }
    });     
};

前に述べたように、データベースが作成されるので、この関数は正常に動作するようです。この次のコードは、angular.js からポスト リクエストを受け取ります。データはテーブルと呼ばれる var にコンパイルされ、テーブルは knex.createUserTable() に送信されます。ただし、コンソールに値が表示されず、500 エラーが返されます。

tables.js

router.route('/addTable')
    .post(function(req, res){

    //code above omitted
        var knx = knex.createUserTable(table);

        knx.then(function(c) {
            console.log(c);
        }).catch(function(err){
            console.log("Error: " + err);
        }).done(function(){
            console.log("Mission accomplished!");
            res.status(200).end();      
        });
    });
4

1 に答える 1

0

答えがわかった。最も外側の関数も返される必要があります。

   return knex.schema.hasTable(x.id).then(function(exists) {
       if (!exists) {
            return knex.schema.createTable(x.id, function(t){
                t.increments();
                t.string(x.type, 50);
                for (var y in x.val){
                    t.string(x.val[y], 255);
                }
                t.timestamps();
            });
        } else {
            return console.log("Error!");
        }
    });     
于 2015-10-27T11:54:10.920 に答える