【发布时间】:2015-05-09 18:57:10
【问题描述】:
我是 nodejs 的新手,正在尝试设置 API 服务器,这是我的第一次尝试。我想使用 mysql 而不是 mongo db。
我的问题是 '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 ;
这是数据库
【问题讨论】:
-
1) 您确定要发布电子邮件吗?如果将行 console.log(' -Post -') 更改为 console.log(' - Post - ' + req.body.email) 会发生什么? 2)你确定这是插入的语法吗?它看起来不像当前的文档,它使用更像 knex.insert(info).into('user')
-
req.body.email 设置为 email 的发布值,我已经检查过了。 body-parser 处理了我被引导相信的这一点。
-
好的,到目前为止一切顺利。现在knex呢?您确定查询语法有效吗?例如,如果您从路由中删除代码并在需要 knex 之后添加一个快速行(类似): knex('user').insert({email:'AQuickTest@Example.com'});发生什么了?然后如果你添加第二行像 knex.insert({email: 'AnotherTest@example.com}).into('user') 会发生什么?
-
knex.insert({email: req.body.email}).into('user');什么都没试过,甚至没有错误。还尝试了 knex('user').insert({email:'AQuickTest@Example.com'});在 var knex = ... 行之后。没有。试过 knex.insert({email: 'AnotherTest@example.com}).into('user') ... 没有。两种都试过了……什么都没有。
-
嗯。可能是 knex 根本没有连接到数据库,也可能是它静默失败。 id 被指定为非空 - 它是否与序列或自动增量或其他东西相关联?或者这可能是一个失败点?顺便说一句 - 您可以将 'debug: true, ' 添加到 dbConfig 以将 SQL 语法和参数绑定输出到控制台。这也会很有帮助。