Answer the question
In order to leave comments, you need to log in
The module returns undefined, why?
I have my module
const fs = require('fs')
const getDataObj = () => {
const regex = /<email>(\D+?)<\/email>/g;
fs.readFile('uploads/dataset.xml', "utf-8", function(err, data) {
let m;
let result = "";
while ((m = regex.exec(data)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
m.forEach((match, groupIndex) => {
if (groupIndex === 1) {
result += match + '\n'
}
});
}
return result
})
}
exports.getDataObj = getDataObj;
const express = require('express')
const pug = require('pug');
const path = require('path');
const parser = require('./parser');
const app = express()
app.set('view engine', 'pug')
app.use('/static', express.static(__dirname + '/static'))
const multer = require('multer')
var upload = multer({
dest: 'uploads/'
})
app.get('/', function(req, res) {
console.log(parser.getDataObj());
res.render(path.join(__dirname, 'views/index.pug'), {
pageTitle: 'Hey',
message: parser.getDataObj()
})
})
app.listen(3000);
Answer the question
In order to leave comments, you need to log in
fs.readFile works asynchronously. Pass a callback to getDataObj or use promises.
More or less like this:
const getDataObj = (cb) => {
const regex = /<email>(\D+?)<\/email>/g;
fs.readFile('uploads/dataset.xml', "utf-8", function(err, data) {
let m;
let result = "";
while ((m = regex.exec(data)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
m.forEach((match, groupIndex) => {
if (groupIndex === 1) {
result += match + '\n'
}
});
}
return cb(result)
})
}
app.get('/', function(req, res) {
parser.getDataObj((message) => {
res.render(path.join(__dirname, 'views/index.pug'), {
pageTitle: 'Hey',
message: message
});
});
});
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question