  In the last years Node.js has emerged as a framework particularly suitable
for implementing lightweight IoT applications, thanks to its underlying
asynchronous event-driven, non blocking I/O model. However, verifying the
correctness of programs with asynchronous nested callbacks is quite difficult,
and, hence, runtime monitoring can be a valuable support to tackle such a
complex task.
  Runtime monitoring is a useful software verification technique that
complements static analysis and testing, but has not been yet fully explored in
the context of Internet of Things (IoT) systems. Trace expressions have been
successfully employed for runtime monitoring in widespread multiagent system
platforms. Recently, their expressive power has been extended to allow
parametric specifications on data that can be captured and monitored only at
runtime. Furthermore, they can be language and system agnostic, through the
notion of event domain and type. This paper investigates the use of parametric
trace expressions as a first step towards runtime monitoring of programs
developed in Node.js and Node-RED, a flow-based IoT programming tool built on
top of Node.js. Runtime verification of such systems is a task that mostly
seems to have been overlooked so far in the literature.
  A prototype implementing the proposed system for Node.js, in order to
dynamically check with trace expressions the correct usage of API functions, is
presented. The tool exploits the dynamic analysis framework Jalangi for
monitoring Node.js programs and allows detection of errors that would be
difficult to catch with other techniques. Furthermore, it offers a simple REST
interface which can be exploited for runtime verification of Node-RED
components, and, more generally, IoT devices.
