I am new to javascript, I am trying to pass the result of a nested function, down to the rest of the parent function ? maybe?
I have documents in one mongodb collection, and company info in another. So I am trying to pair them up like this part of the code, but it is not doing what I am trying to get done. I think I am clearly missing something about javascript and the way it functions.
I am able to get the list of companies, and log to the console, but I can't do what I am doing at this line
'name': companies[0]['name'],
const mongoose = require('mongoose');
const express = require('express');
var cors = require('cors');
const bodyParser = require('body-parser');
const logger = require('morgan');
const {Data, Companies} = require('./data.js');
const API_PORT = 3001;
const app = express();
app.use(cors());
const router = express.Router();
const dbRoute = 'mongodb://192.168.200.20/matrix';
mongoose.connect(dbRoute, { useNewUrlParser: true, useUnifiedTopology: true});
let db = mongoose.connection;
db.once('open', () => console.log('connected to the database'));
db.on('error', console.error.bind(console, 'MongoDB connection error:'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(logger('dev'));
router.post("/searchData", (req, res, next) => {
console.log("REQ---", req.body.search_obj)
let answers = []
let search_query = req.body.search_obj
let arg_group = [];
let arg_template = [];
let arg_object = {}
for (i in search_query){
arg_query = {search_text: { $regex: new RegExp(search_query[i]), $options: 'i' }}
arg_group = arg_group.concat(arg_query)
}
arg_template = arg_template.concat(arg_group)
arg_list = "\"{$and: [" + arg_group + "]}\""
arg_object['$and'] = arg_template
Data.find(arg_object, function (err, data){
if (err){
console.log(err);
}
else {
console.log("LENGTH", data.length)
for (i in data) {
console.log("Resolved to ... : ", data[i]['_id'], data[i]['title']);
Companies.find({_id: data[i]['_id']})
.then(companies => {
console.log("Company Name:")
console.log("NAME >>>> >>>> ", companies[0]['name']);
})
.catch(err => {
console.log(err);
})
search_reply = {
'_id': data[i]['_id'],
'title': data[i]['title'],
'url': data[i]['url'],
'release_date': data[i]['release_date'],
'document_date': data[i]['document_date'],
'name': companies[0]['name'],
}
answers[i] = search_reply
}
console.log("LENGTH", data.length)
console.log("ANSWERS", answers)
console.log("LENGTH", data.length)
return res.json(answers);
}
})
});
router.post('/updateData', (req, res) => {
const { id, update } = req.body;
Data.findByIdAndUpdate(id, update, (err) => {
if (err) return res.json({ success: false, error: err });
return res.json({ success: true });
});
});
router.delete('/deleteData', (req, res) => {
const { id } = req.body;
Data.findByIdAndRemove(id, (err) => {
if (err) return res.send(err);
return res.json({ success: true });
});
});
router.post('/putData', (req, res) => {
let data = new Data();
const { id, message } = req.body;
if ((!id && id !== 0) || !message) {
return res.json({
success: false,
error: 'INVALID INPUTS',
});
}
data.message = message;
data.id = id;
data.save((err) => {
if (err) return res.json({ success: false, error: err });
return res.json({ success: true });
});
});
app.use('/api', router);
app.listen(API_PORT, () => console.log(`LISTENING ON PORT ${API_PORT}`));