3

I had an error with this code

exports.getResults = (req, res) => {
    status = await miDealApi.getResults()
    res.json({
        status: status
    })
}

The issue was that i used 'await' without declaring the method as 'async', but the error Node.js was giving me was very unclear, and didn't help me figuring it out at all.

internal/modules/cjs/loader.js:999
    throw err;
    ^

[wrapSafe (internal/modules/cjs/loader.js:979:16),Module._compile
(internal/modules/cjs/loader.js:1027:27),Object.Module._extensions..js
(internal/modules/cjs/loader.js:1092:10),Module.load 
(internal/modules/cjs/loader.js:928:32),Function.Module._load
(internal/modules/cjs/loader.js:769:14),Module.require
(internal/modules/cjs/loader.js:952:19),require
     (internal/modules/cjs/helpers.js:88:18),Object.<anonymous> (C:\Users\user\Documents\DT\projects\suresort-manager\controllers\waveFactory.js:6:30),Module._compile 
(internal/modules/cjs/loader.js:1063:30),Object.Module._extensions..js
(internal/modules/cjs/loader.js:1092:10)]
PS C:\Users\user\Documents\DT\projects\suresort-manager>

Is there anything i can do to make errors like this clearer in the future?

2
  • 2
    The error node gives me is Uncaught SyntaxError: await is only valid in async function. The error chrome dev console gives me is Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules. Your error is probably related to the exports module being malformed due to the async/await issue. Commented Apr 6, 2021 at 14:33
  • any function that is using await within needs to be async function Commented Apr 6, 2021 at 14:41

2 Answers 2

1

One possibility is that your node.js version is a bit older, and thus, doesn't give you the proper error.

Running with Node 12 I get:

/project/foo.js:2
  status = await miDealApi.getResults()
           ^^^^^

SyntaxError: await is only valid in async function
    at wrapSafe (internal/modules/cjs/loader.js:915:16)
    at Module._compile (internal/modules/cjs/loader.js:963:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47

So you might want to check your version?

node -v
12.21.0

You should always aim for working with at least the stable version.

Sign up to request clarification or add additional context in comments.

Comments

1

Keep in mind: await has to use with async.

An async function is a function declared with the async keyword, and the await keyword is permitted within them. The async and await keywords enable asynchronous, promise-based behavior to be written in a cleaner style, avoiding the need to explicitly configure promise chains.

Change your code like below:

exports.getResults = async (req, res) => {
    status = await miDealApi.getResults()
    res.json({
        status: status
    })
}

Happy coding :)

1 Comment

I was able to solve it, i was asking about why the error that i had was so unclear

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.