将CSV文件导入MySQL



我是nodejs的初学者,正在尝试将CSV文件导入MySQL连接工作成功,但当我上传文件时,它给出了一个错误

我这样做:

//use express static folder
app.use(express.static("./public"))

// body-parser middleware use
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
extended: true
}))


db.connect(function (err) {
if (err) {
return console.error('error: ' + err.message);
}
console.log('Connected to the MySQL server.');
})

//! Use of Multer
var storage = multer.diskStorage({
destination: (req, file, callBack) => {
callBack(null, './uploads/')    
},
filename: (req, file, callBack) => {
callBack(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
}
})

var upload = multer({
storage: storage
});

//! Routes start

//route for Home page
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});

//@type   POST
// upload csv to database
app.post('/uploadfile', upload.single("uploadfile"), (req, res) =>{
UploadCsvDataToMySQL(__dirname + '/uploads/' + req.file.filename);
console.log('CSV file data has been uploaded in mysql database ' + err);
});

function UploadCsvDataToMySQL(filePath){
let stream = fs.createReadStream(filePath);
let csvData = [];
let csvStream = csv
.parse()
.on("data", function (data) {
csvData.push(data);
})
.on("end", function () {
// Remove Header ROW
csvData.shift();

// Open the MySQL connection
db.connect((error) => {
if (error) {
console.error(error);
} else {
let query = 'INSERT INTO files (File-ID, File_Name) VALUES ?';
db.query(query, [csvData], (error, response) => {
console.log(error || response);
});
}
});

// delete file after saving to MySQL database
// -> you can comment the statement to see the uploaded CSV file.
fs.unlinkSync(filePath)
});

stream.pipe(csvStream);
}

//create connection
const PORT = process.env.PORT || 8000
app.listen(PORT, () => console.log(`Server is running at port ${PORT}`))

但它给了我一个错误:ReferenceError:err未定义位于C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\index.js:80:72在Layer.handle[as-handle_request](C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\express\lib\router\Layer.js:95:5(在next(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\express\lib\router\route.js:137:13(在Array。(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\multer\lib\make middleware.js:53:37(在侦听器(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\on finished\index.js:169:15(at on Finish(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\on finished\index.js:100:5(在回调时(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\ee-first\index.js:55:10(在IncomingMessage.onevent(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\ee-first\index.js:93:5(在IncomingMessage.emit(节点:事件:341:22(在endReadableNT(节点:内部/流/可读:1294:12(错误:您的SQL语法有错误;在第1行的"-ID,File_Name(VALUES('112','test2'("附近,查看与MySQL服务器版本相对应的手册,以获得正确的语法at Packet.asError(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\mysql2\lib\Packet\Packet.js:728:17(在Query.execute(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\mysql2\lib\commands\command.js:29:26(在Connection.handlePacket(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\mysql2\lib\Connection.js:456:32(在PacketParser.onPacket(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\mysql2\lib\connection.js:85:12(在PacketParser.executeStart(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\mysql2\lib\packet_parser.js:75:16(在Socket。(C:\Users\DELL\Desktop\AdvancedSeE\dbmanager\node_modules\mysql2\lib\connection.js:92:25(在Socket.eemit(节点:事件:329:20(在addChunk(节点:内部/流/可读:304:12(在readableAddChunk(节点:internal/streams/readable:279:9(位于Socket.Readable.push(节点:internal/streams/Readable:218:10({代码:'ER_PARSE_ERROR',错误号:1064,sqlState:"42000",sqlMessage:"您的SQL语法有错误;在第1行的"-ID,File_Name(VALUES('112','test2'("附近使用的正确语法,请查看与MySQL服务器版本对应的手册;,sql:";INSERT INTO文件(文件ID,文件名称(VALUES('112','test2'("}

导入文件中的列名似乎无效,正如您在错误消息末尾看到的那样,您有

INSERT INTO files (File-ID, File_Name) VALUES ('112', 'test2')

列名文件ID应该更改(mysql中的减号用于数学和平均列File-列ID(

或使用backtics

INSERT INTO files (`File-ID`, File_Name) VALUES ('112', 'test2')

或避免减号

INSERT INTO files (File_ID, File_Name) VALUES ('112', 'test2')

尝试编辑文件并正确更改名称

最新更新