如何将JSON输出插入与节点js的MySQL

var express = require('express'); var fs = require('fs'); var mysql = require('mysql'); var request = require('request'); var cheerio = require('cheerio'); var bodyParser = require('body-parser'); var app = express(); var output; app.use(bodyParser.json()) app.get('/scrape', function(req, res){ url = 'https://raitalumni.dypatil.edu/events/?tag=live'; request(url, function(error, response, html){ if(!error){ var $ = cheerio.load(html); var json = { title : [], date : [], month : [], venue : [], link : [] }; output = { events : [] }; $('p.event_name').each(function(){ json.title.push($(this).text()); }); $('p.calendar_date').each(function(){ json.date.push($(this).text()); }); $('span.calendar_month').each(function(){ json.month.push($(this).text()); }); //var fulldate = $('p.calendar_date').concat($('p.calendar_day')).text(); //console.log('all records: ' + fulldate); $('p.event_venue').each(function(){ json.venue.push($(this).text()); }); // var title = $('p.event_name').each(function(){$(this).text()}); for(var i=0; i<json.title.length; i++){ output.events[i] = { title : json.title[i], date : json.date[i], month : json.month[i], venue : json.venue[i], link : url } } var connection = mysql.createConnection({ host: '127.0.0.1', port: 3306, user: 'root', password: '', database: 'raithub' }); connection.connect(function(error){ if(!!error){ console.log('Error'); }else{ console.log('Connected to the database!'); } }); var scrape = JSON.stringify(output, null, 4); console.log(scrape); var query = connection.query("INSERT INTO scrapped ('title','date','month','venue','link') VALUES ('" + output.title + "', '" + output.date + "', '" + output.month + "', '" + output.venue + "', '" + output.link + "');", scrape, function(err, result) { if(err) throw err; console.log('data inserted'); }); fs.writeFile('output4.json', JSON.stringify(output, null, 4), function(err){ console.log('File successfully written! - Check your project directory for the output.json file'); }) res.send('Check your console!') } else { console.log("Network Error, please try again later") } }) }) app.listen('8000') console.log('Server running on port 8081'); exports = module.exports = app; 

我哪里错了?

得到这个错误,

 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''title','date','month','venue','li nk') VALUES ('undefined', 'undefined', 'undefi' at line 1 error 

INSERT语句应该是这样的:

 INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); 

列名不应该在引号中。 你的具体陈述是这样的:

  var query = connection.query("INSERT INTO scrapped (title,date,month,venue,link) VALUES ('" + output.title + "', '" + output.date + "', '" + output.month + "', '" + output.venue + "', '" + output.link + "');", scrape, function(err, result) { if(err) throw err; console.log('data inserted'); }); 

看到这个正确的语法

MySQL中有一个JSON数据types。

 mysql> CREATE TABLE t1 (jdoc JSON); Query OK, 0 rows affected (0.20 sec) mysql> INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}'); Query OK, 1 row affected (0.01 sec) 

如果你有一个非常大的json对象,并且不想创build一个巨大的INSERT语句,这将特别有用。 如果您不确定通过json进入的确切数据,但是您想要捕获所有数据,这也是有用的。 我目前正在一个项目中,我们偶尔添加和删除用户input字段的项目,这是非常有用的,所以我不经常需要ALTER表和编辑MySQL中的其他语句。

更多信息可以在这里find: https : //dev.mysql.com/doc/refman/5.7/en/json.html