【问题标题】:Saving text filename to database using NodeJs使用 NodeJs 将文本文件名保存到数据库
【发布时间】:2018-09-27 04:07:32
【问题描述】:

我有一个问题,我需要你的帮助.. 是否可以创建一个应用程序,将所有.txt 放在一个目录中,然后将其文件名保存到数据库中,如果对文件名进行验证,则不会在数据库中保存两次。

我的代码在这里:

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(*) FROM txtfilename WHERE filename="${filename}"';
        con.query(selectSql, (err, results, fields) => {
                // TODO: Catch the error
                var matchingEntriesCount = results

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

我的代码现在可以读取将保存在目录中的所有文件,但我在 SELECTINSERT 上遇到了问题。

我想使用 select 进行验证。为了不在数据库中插入相同的文件名。

最后是插入。我想插入每个将保存到目录的新文件名。

希望有人可以帮助我。

我只是 NodeJS 的新手

【问题讨论】:

  • 您要添加文件名还是完整(或相对)路径?
  • 只是文件名.. 然后我将调用所有文件名然后保存所有文件名内容并合并为一个..

标签: javascript mysql node.js select insert


【解决方案1】:

我看到的第一个问题是您只需要从观察者返回的path 中获取文件名。我将为此使用pathbasename 方法。

const path = require('path')

...

watcher.on('add', function(filePath) {
    var filename = path.basename(filePath);
    ....

然后您必须计算表中与此文件名匹配的条目。

    var selectSql = `SELECT count(*) AS matchingEntriesCount FROM txtfilename WHERE filename="${filename}"`

    con.query(selectSql, (err, results, fields) => {
        // TODO: Catch the error
        var matchingEntriesCount = results[0].matchingEntriesCount

        if (matchingEntriesCount === 0) {
            // TODO: Do your insert query
        }
    });
});

【讨论】:

  • 嗨@Pierre,我应该在filePath上插入文件目录吗?...因为现在有一个错误... TypeError:path.basename is not a function
  • 哎呀!在watcher.on('add', function(filePath) { 中将path 更改为filePath。我更新了我的答案。
  • 谢谢.. 现在我添加了我的插入查询,但我的 git bash 上没有显示结果.. 我会更新我的代码
  • @RiyotaMiyagi 我的代码(最后一部分)在获取count(*) 值的方式中存在问题。我修好了它!我应该在提交答案之前测试我的代码。
  • 哇..谢谢伙计..这真的对我有帮助...感谢您的努力...:)
猜你喜欢
  • 2021-12-24
  • 2020-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2014-03-29
  • 1970-01-01
  • 2014-08-21
相关资源
最近更新 更多