Я получаю эту странную ошибку и не смог отследить ее.
Настройка: Узел V8.10.0, expressjs, mongodb
Я не считаю, что это является частью конечных точек API, а скорее импортером скрипт.
Вы можете увидеть ошибку, которую я получаю здесь: https://dpaste.org/zs2S
Это всегда
Ошибка: асин c крючок стек поврежден
Ниже приведен код, который я запускаю. Его целью является использование chokidar для просмотра каталога. (Ранее использовался fs.watch , но изменился на chokidar из-за того, что он думал, что это ошибка fs, но все еще ее получает). А когда файл изменяется, используйте csv2 json, чтобы получить файл и вернуть его как json объект.
Как только этот объект будет извлечен, вставьте его в mon go, сначала добавив его с именем _Update в качестве новой коллекции. Удалите текущий живой, затем переименуйте новый, удалив _Update, и, следовательно, сделайте его живым.
Я использую pm2 для запуска приложения. Он работает какое-то время, но в какой-то момент всегда будет вызывать sh с указанной ошибкой.
//require the mongojs package to setup db connection
var mongojs = require("mongojs");
//require the csvtojson package to convert the CSV file
var csv = require("csvtojson");
require("log-timestamp");
const chokidar = require("chokidar");
var config =
require("../../config/config").get(process.env.NODE_ENV);
var db = mongojs(config.database);
exports.import = function() {
// Initialize watcher.
const watcher = chokidar.watch(config.watchfolder, {
ignored: /(^|[\/\\])\../, // ignore dotfiles
persistent: true,
awaitWriteFinish: true
});
// Something to use when events are received.
const log = console.log.bind(console);
watcher.on("change", path => {
log(`File ${path} has been changed`);
let requiredCollection = config.sources.find(o => o.csvFile === path);
csv()
.fromFile(path)
.then(jsonArrObj => {
if (requiredCollection.collectionName.includes("RiverLevels")) {
for (var item in jsonArrObj) {
if (jsonArrObj[item].Movement == "S") {
jsonArrObj[item].Movement = "Steady";
}
if (jsonArrObj[item].Movement == "R") {
jsonArrObj[item].Movement = "Rising";
}
if (jsonArrObj[item].Movement == "F") {
jsonArrObj[item].Movement = "Falling";
}
if (jsonArrObj[item].PrimaryStation == "1") {
db.collection("riverOverview").replaceOne(
{ StationName: jsonArrObj[item].StationName },
jsonArrObj[item]
);
console.log("Primary Station updated into riverOverview");
}
}
}
//Create new collection with _update
db.createCollection(
requiredCollection.collectionName + "_Update",
function(err) {
//Insert data fulled from file
db.collection(requiredCollection.collectionName + "_Update").insert(
jsonArrObj,
function(err, result) {
if (err) {
console.log(err);
}
console.log(
requiredCollection.collectionName + "_Update added to mongo"
);
//Drop the current DB
db.collection(requiredCollection.collectionName).drop(function(
err
) {
if (err) {
console.log(err);
}
console.log(
"Old " + requiredCollection.collectionName + " deleted."
);
//rename update DB to make it the live one.
db.collection(
requiredCollection.collectionName + "_Update"
).rename(requiredCollection.collectionName, function(
err,
collection
) {
if (err) {
console.log(err);
} else {
console.log("rename Results: " + collection.namespace);
}
console.log(
requiredCollection.collectionName +
"_Update renamed to: " +
requiredCollection.collectionName
);
});
});
}
);
}
);
});
});
};