javascript - 使用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");
});
}
});
});
});
希望有人能帮助我解决我的问题..谢谢。
解决方案
watcher
是函数的局部变量,connect
因此在退出函数时会被删除。如果你想让你的代码工作,你需要让 watcher 成为一个全局变量。
无论如何,当您调用时,连接都会隐式建立con.query
,因此您可以完全删除con.connect
。
推荐阅读
- php - Laravel livewire 存储数组无法存储数据
- sql - BigQuery:多个 JOIN 条件下的 WITH 子句行为
- react-native - 如何访问在特定端口上运行的 gitpod react-native locallink?
- reactjs - React axios Post错误,数据格式错误
- javascript - 使用 Discord JS 创建角色
- c - 将 While 循环转换为 For 循环
- azure-devops - 如何在外部 API 中验证 System.Accesstoken 在 Auth 标头中使用时?
- asp.net - 如何在 Asp.Net 中的数据绑定表达式中防止 XSS
- html - 我可以让我的卡片中的孩子都拥有其中最大的身高吗?
- python - 如何将我从以前的算法中获得的多个数值添加到数组中,以便在 MU python 编辑器中为 microbit 进行一些计算?