# How generate new msg, for use outside node.on('input',cb)

**URL:** <https://discourse.nodered.org/t/how-generate-new-msg-for-use-outside-node-on-input-cb/24936>\
**Category:** Developing Nodes\
**Created:** [16 April 2020 09:48 UTC](https://discourse.nodered.org/t/how-generate-new-msg-for-use-outside-node-on-input-cb/24936 "2020-04-16T09:48:17Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![bug00](https://avatars.discourse-cdn.com/v4/letter/b/9de0a6/32.png) [@bug00](https://discourse.nodered.org/u/bug00)\
**Post date:** [16 April 2020 09:48 UTC](https://discourse.nodered.org/t/how-generate-new-msg-for-use-outside-node-on-input-cb/24936/1 "2020-04-16T09:48:17Z")

</div>

Hi,

I had an output node who listen directory. I want use jsonata on some properties, process like this

```auto
            const expr = RED.util.prepareJSONataExpression(node.ignoredFiles,node)
            let msg = {}
            RED.util.evaluateJSONataExpression(expr, msg, rep =>{
              console.log(" ******",rep,node);
              return rep
            })

```

evaluateJSONataExpression need a msg... I don't understand why msg is needed, and i haven't.

The code above won't works... somebody can explai me how to use evaluateJSONataExpression without msg or if they are a function on node object for create msg ?

Thanks

---

<div class="post-metadata">

**Author:** ![knolleary](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/knolleary/32/3_2.png) [@knolleary](https://discourse.nodered.org/u/knolleary)\
**Post date:** [16 April 2020 10:05 UTC](https://discourse.nodered.org/t/how-generate-new-msg-for-use-outside-node-on-input-cb/24936/2 "2020-04-16T10:05:43Z")

</div>

There are two parts here - `prepareJSONataExpression` and then `evaluateJSONataExpression`.

The prepare step takes two arguments:

- the JSONata expression (as a string)
- the node evaluating the expression. This is needed so if the $flowContext/$globalContext functions are used, it knows what node to use to access context.

The evaluate step is where the expression is actually run. It takes two arguments:

- the prepared expression (as returned by `prepareJSONataExpression`)
- the object to evaluate the expression against - usually a message, but it can be whatever object you want the expression to evaluate against.

In your case, what sort of expression does `node.ignoredFiles` contain? It's hard to say what you should use as the second arg to `evaluate` without knowing what sort of expression you want the user to provide.

---

<div class="post-metadata">

**Author:** ![bug00](https://avatars.discourse-cdn.com/v4/letter/b/9de0a6/32.png) [@bug00](https://discourse.nodered.org/u/bug00)\
**Post date:** [16 April 2020 10:24 UTC](https://discourse.nodered.org/t/how-generate-new-msg-for-use-outside-node-on-input-cb/24936/3 "2020-04-16T10:24:46Z")

</div>

ok, so msg would be the filename but syntaxe ?

```auto
let msg = { filename : filename }
 RED.util.evaluateJSONataExpression(expr, msg, rep =>{
              console.log(" ******",rep,node);
              return rep
            })

```

evaluateJSONataExpression check every properties of msg ?

My Jsonata expr

```auto
`$not($contains(file, /(.*)\.(jpe?g)$/))`

```

The goal it's to exclude filename on pattern. The input accept regex of course, but since my input need return true or false (i.e. don't treat this new file cause name doesn't satisfy the jsonata expr or the regex) i want use jsonata too

Thanks

---

<div class="post-metadata">

**Author:** ![bug00](https://avatars.discourse-cdn.com/v4/letter/b/9de0a6/32.png) [@bug00](https://discourse.nodered.org/u/bug00)\
**Post date:** [16 April 2020 11:45 UTC](https://discourse.nodered.org/t/how-generate-new-msg-for-use-outside-node-on-input-cb/24936/4 "2020-04-16T11:45:15Z")

</div>

```auto
let msg = {file}
const expr = RED.util.prepareJSONataExpression(node.ignoredFiles,node)
console.log(expr.evaluate(msg));

```

works as excepted (i.e. return true or false)

but

```auto
let msg = {file}
const expr = RED.util.prepareJSONataExpression(node.ignoredFiles,node)
RED.util.evaluateJSONataExpression(expr,msg, function(rep) {
  console.log(" ******",rep);
  return rep
})

```

return null

---

<div class="post-metadata">

**Author:** ![bug00](https://avatars.discourse-cdn.com/v4/letter/b/9de0a6/32.png) [@bug00](https://discourse.nodered.org/u/bug00)\
**Post date:** [16 April 2020 11:51 UTC](https://discourse.nodered.org/t/how-generate-new-msg-for-use-outside-node-on-input-cb/24936/5 "2020-04-16T11:51:58Z")

</div>

hum it's embarrassing... newbie fault, by convention first argument of callback it's err...

By the way, thanks for your time and for your explanation.

Really thankfull.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [15 June 2020 11:52 UTC](https://discourse.nodered.org/t/how-generate-new-msg-for-use-outside-node-on-input-cb/24936/6 "2020-06-15T11:52:07Z")

</div>

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.
