首页 > 解决方案 > 使用Nodejs自动将文件名保存在数据库中

问题描述

我在使用 NodeJS 时遇到问题。我想创建一个服务器端脚本,它将新文件的文件名添加到其目录中并自动将其保存到数据库中。

这是我的代码:

const path = require('path')

//mysql Connecion
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "sms"
});

//con checking if the database is connected
con.connect(function(err) {
    if (err) throw err;

    //watchfile directory if there's new added file
    var chokidar = require('chokidar'); 
    var watcher = chokidar.watch('texts/', {ignored: /^\./, persistent: true});

    //for getting the filename only
    var fs = require('fs');
    var testFolder = 'texts/';

    watcher.on('add', function(filePath) {

        var filename = path.basename(filePath);

        var selectSql = 'SELECT count(filename) AS matchingEntriesCount FROM txtfilename WHERE filename="${filename}"';
        con.query(selectSql, (err, results, fields) => {
            // TODO: Catch the error
            console.log(err);
            var matchingEntriesCount = results[0].matchingEntriesCount

            if (matchingEntriesCount == 0) {
                console.log('File', filename, 'has been added');
                // TODO: Do your insert query
                var insertsql = "INSERT INTO txtfilename (filename) VALUES ('"+ filename +"')";
                con.query(insertsql, function (err, result) {
                    if (err) throw err;
                    console.log("1 record inserted");
                });

            }
        });
    });

});

希望有人能帮助我解决我的问题..谢谢。

标签: javascriptmysqlnode.js

解决方案


watcher是函数的局部变量,connect因此在退出函数时会被删除。如果你想让你的代码工作,你需要让 watcher 成为一个全局变量。

无论如何,当您调用时,连接都会隐式建立con.query,因此您可以完全删除con.connect


推荐阅读