# Substr in function

**URL:** <https://discourse.nodered.org/t/substr-in-function/83525>\
**Category:** General\
**Tags:** function-node\
**Created:** [8 December 2023 13:25 UTC](https://discourse.nodered.org/t/substr-in-function/83525 "2023-12-08T13:25:48Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![bpi2008](https://avatars.discourse-cdn.com/v4/letter/b/9fc29f/32.png) [@bpi2008](https://discourse.nodered.org/u/bpi2008)\
**Post date:** [8 December 2023 13:25 UTC](https://discourse.nodered.org/t/substr-in-function/83525/1 "2023-12-08T13:25:48Z")

</div>

Hello all,

I thought I could put a substring in a function but it doesn't work a priori, what is my mistake please?

I have this error =\> TypeError: Data.substr is not a function

Below my (simple) function :

```auto
let Data = msg.payload;
let totalLeaks = (Data.substr(6,6));
let lastleakduration = (Data.substr(12,6));
msg.payload = {
    leaks : totalLeaks,
    duration : lastleakduration
}
return msg;

```

---

<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:** [8 December 2023 13:28 UTC](https://discourse.nodered.org/t/substr-in-function/83525/2 "2023-12-08T13:28:22Z")

</div>

Hi @bpi2008

`substr` is a function only available on String objects.

This error suggests the `msg.payload` you are passing this function is not a String.

Can you wire in a Debug node in parallel to see exactly what `msg.payload` you are passing into the function?

---

<div class="post-metadata">

**Author:** ![bpi2008](https://avatars.discourse-cdn.com/v4/letter/b/9fc29f/32.png) [@bpi2008](https://discourse.nodered.org/u/bpi2008)\
**Post date:** [8 December 2023 14:47 UTC](https://discourse.nodered.org/t/substr-in-function/83525/3 "2023-12-08T14:47:26Z")

</div>

Hi Knolleray,

decoded\_payload: object  
BAT\_V: 3.144  
LAST\_WATER\_LEAK\_DURATION: 0  
MOD: 2  
WATER\_LEAK\_STATUS: 0  
WATER\_LEAK\_TIMES: 92

I have changed simply my function and i's ok now by :

```auto
var duration = msg.payload.uplink_message.decoded_payload.WATER_LEAK_TIMES;
msg.payload = duration;
return msg;

```

I'm very interesting to test "substr" for other functions.

Many thanks for all. Bernard

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [8 December 2023 15:06 UTC](https://discourse.nodered.org/t/substr-in-function/83525/4 "2023-12-08T15:06:36Z")

</div>

> [@bpi2008](#):
>
> I'm very interesting to test "substr" for other functions.

For the record, you should be using substring(), substr has been deprecated.

> **[String.prototype.substr() - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr)**
>
> The substr() method of String values returns a portion of this string, starting at the specified index and extending for a given number of characters afterwards.

---

<div class="post-metadata">

**Author:** ![bpi2008](https://avatars.discourse-cdn.com/v4/letter/b/9fc29f/32.png) [@bpi2008](https://discourse.nodered.org/u/bpi2008)\
**Post date:** [8 December 2023 16:11 UTC](https://discourse.nodered.org/t/substr-in-function/83525/5 "2023-12-08T16:11:35Z")

</div>

very good thanks Colin

---

<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:** [6 February 2024 16:11 UTC](https://discourse.nodered.org/t/substr-in-function/83525/6 "2024-02-06T16:11:55Z")

</div>

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