0

In my main routes file, I need to call a piece of code several times, so I am trying to put this piece of code in a separate module called 'getDayWorkout', so I dont have to repeat it over and over. I am struggling to accomplish this. Right now, the getDayWorkout function is triggered but it doesn't get to the nested function in it. Below is the code in my main route file, followed by the code on the external module exported as 'getDayWorkout'. Any help is appreciated.

const express = require('express')
const router = express.Router()
const connection = require('../../helpers/connection')
const getDayWorkout = require('../middlewares/getDayWorkout') // <= external module
    
router.get("/fetchcustomworkoutplan/:id", (req, res) => {
        console.log('MENFIS39: ', req.params)
        const userId = parseInt(req.params.id);
        let queryString = "SELECT day_one, day_two, day_three, day_four, day_five, day_six, day_seven FROM user_workout_plans WHERE user_id = ? AND status = ?"
        connection.query(queryString, [userId, 'Active'], async (err, rows, fields) => {
            if (err) {
                // // console.log(err)
                res.status(500).json({error: 'error'})
                return
            }
            if (rows.length === 0) {
                res.json(rows)
                return
            }
            console.log('wokour opans: ', rows)
            const userWorkoutPlans = rows[0]
            const { day_one, day_two, day_three, day_four, day_five, day_six, day_seven } = userWorkoutPlans
            if (day_one !== null) {
                
                    workoutDayOne = await getDayWorkout(day_one)
                
            }
            res.json(res.workoutPlans)
        })
    })

getDayWorkout File:

const connection = require('../../helpers/connection')

function getDayWorkout(dayWorkoutId) {
    console.log('here', dayWorkoutId) // <= triggered
    return (req, res, next) => {
        console.log('here2') // <=  triggered
        let queryString = "SELECT * FROM workout_sequences WHERE workout_id = ?"
        connection.query(queryString, [dayWorkoutId], (err, rows, fields) => {
            if (err) {
                // // console.log(err)
                res.status(500).json({error: 'error'})
                return
            }
            console.log('hit')
            return rows
        })
    }
}

module.exports = getDayWorkout;
1
  • So you are not getting rows returned from the getDayWorkout method ? Commented Apr 13, 2021 at 10:11

1 Answer 1

2

If you want to return values from getDayWorkout method, you need either callback or promise. Since JS is asynchronous you cannot just return the value of an asynchronous calls.

Here is an implementation of Promise on which you can use await or then

const connection = require('../../helpers/connection')

function getDayWorkout(dayWorkoutId) {
    return new Promise((resolve, reject) => {
       console.log('here', dayWorkoutId) // <= triggered
       console.log('here2') // <=  triggered
       let queryString = "SELECT * FROM workout_sequences WHERE workout_id = ?"
       connection.query(queryString, [dayWorkoutId], (err, rows, fields) => {
          if (err) {
              reject(err);         
              return;
          }
          resolve(rows);
       });
    });
}

module.exports = getDayWorkout;
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.