Apoorva sahay Apoorva sahay - 5 months ago 11
Javascript Question

Script written in Javascript not terminating on its own?

Hi I have written a script that has a recursive function which takes a path and parses the directory structure. The script works as expected but it does not terminate on its own. Script is written in Javascript and it uses NodeJs modules like fs(file System) and path.

My code :

var parseDirectory = function(currPath, tags, func){
var util = util || require('./util');
var fs = fs || require('fs');
var path = path || require('path');
if(!util.fileExist(currPath)) {
throw new Error('Path is invalid, it does not exist.');
}

//get the stat and do operation according to file type
var stat = fs.statSync(currPath);

//if directory
// - get all files inside the directory
// - push the currPath in tags
// - call parseDirectory for each file
// - pop from the tags array
if(stat.isDirectory()) {
var files = fs.readdirSync(currPath);
var fs = fs || require('fs');
tags.push(path.parse(currPath).name);
files.forEach(function(file) {
parseDirectory(path.join(currPath,file),tags,func);
});
tags.pop();
} else if(stat.isFile()) {
func(currPath,tags);
} else {
throw new Error('Path is not a file or Directory');
}
}

//connect to db
var mongoose = mongoose || require('mongoose');
mongoose.connect('mongodb://localhost:27017/iconrepo');

// a sample call to parseDirectory
parseDirectory('icon/png/',[],function(filePath, tags) {
var path = path || require('path');
var fs = fs || require('fs');
var File = require('./models/file');
var stat = fs.statSync(filePath);

var file = new File({
name : path.parse(filePath).name,
type : path.extname(filePath),
size : stat.size,
tags : tags,
path : filePath
});

//console.log(file);
//file.save(function(err) {
// if(err) {
// throw new Error(err);
// }

// console.log('Added ', filePath);
//});

console.log('Exiting Callback for filePath',filePath);
});

console.log('Last statement of the script');


File.js

// a file schema file

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var fileSchema = new Schema({
name: String,
type: String,
size: {type: Number},
tags: [String],
path: String
});

module.exports = mongoose.model('File',fileSchema);
// a file schema file

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var fileSchema = new Schema({
name: String,
type: String,
size: {type: Number},
tags: [String],
path: String
});

module.exports = mongoose.model('File',fileSchema);


Can anyone please point me what mistake I am making.

Answer

Mongoose established a connection which would keep your script running.

Call mongoose.connection.close() end your script.