我使用Node模块KNEX进行MYSQL调用。我希望用户能够添加自己的自定义表。我可以使用所有列向MYSQL添加数据库,但在我的控制台中,我收到500内部服务器错误。
这是我的自定义文件knex.js,它访问MYSQL数据库:
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接收一个post请求。数据被编译为名为表的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();
});
});
答案 0 :(得分: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!");
}
});