Core points
- MATLAB, a high-level language for technical computing, can be integrated with the MEAN stack to create powerful web applications.
- MEAN stack consists of MongoDB, Express.js, AngularJS and Node.js, and when used in conjunction with MATLAB, it allows real-time data visualization on the web.
- The integration process involves using MATLAB's computing power to process data and generate results, which are then displayed on a web application built using the MEAN stack.
- JSONlab, a free open source JSON encoder/decoder implementation in the MATLAB language, is used to convert MATLAB data to JSON format for use in web applications.
- Creating a MATLAB Web Application includes creating standalone applications using MATLAB Compiler, creating a web application project in the MATLAB Web App Server, uploading standalone applications to the web application project, and deploying the web application to the user.
MATLAB is a high-level language for technical computing that integrates computing, visualization and programming in an easy-to-use environment where problems and solutions can be expressed in familiar mathematical notation. There are many projects around the world written in MATLAB and developed by millions of scientists and engineers. Various experimental and operational data people obtain from MATLAB can be used to support web applications, but there are some obstacles:
- MATLAB understands matrix format data, while web applications prefer data in JSON or XML format.
- Data is usually created and used within the MATLAB program, which limits developers' freedom in saving and using data, etc.
Creating an application is much easier if MATLAB serves data in JSON format and a web application can use this JSON data from MATLAB to create something great.
In this article, we will develop a small demonstration program to demonstrate how to make the MATLAB and MEAN stack work together.
About Web Application
This web application will involve real-time data transfer from MATLAB to the browser. For simplicity, we will transfer the current time from MATLAB and display it on the browser. We will use JSONlab, a toolbox for encoding/decoding JSON files in MATLAB. The web application will be created using the MEAN stack. If you are not familiar with MEAN stack, it is recommended that you read the article "Beginner of MEAN Stack" before continuing.
Introduction to JSONlab
JSONlab is a free open source implementation of JSON encoder/decoder in MATLAB language. It can be used to convert MATLAB data structures (arrays, structures, cells, structure arrays, and cell arrays) into strings in JSON format, or to decode JSON files into MATLAB data.
It gives us access to four functions: loadjson()
, savejson()
, loadubjson()
, and saveubjson()
. The last two functions are used to handle the UBJSON format. loadjson()
is used to convert JSON strings into related MATLAB objects. In our project, we only use the savejson()
function, which converts a MATLAB object (cell, structure, or array) to a JSON string. It can be used as follows:
json = savejson(rootname, obj, filename) json = savejson(rootname, obj, opt) json = savejson(rootname, obj, 'param1', value1, 'param2', value2, ...)
Since we have to write the file, we will use the first signature. It returns a JSON string as well as writes the string to the file.
JSONlab installation
To get started, download JSONlab, unzip the archive, and add the path of the folder to the path list of MATLAB using the following command:
addpath('/path/to/jsonlab');
If you want to add this path permanently, you need to type pathtool
, browse to the JSONlab root folder and add it to the list. Once finished, you must click Save. Then, run rehash
in MATLAB and type which loadjson
. If you see the output, it means JSONlab is installed correctly.
MATLAB code
We need the current time, so we will use the clock
command. It returns a six-element date vector containing the current date and time in the format [Year, Month, Day, Hours, Minutes, Seconds]. To get the time repeatedly, we put the clock
command in an infinite while
loop. Therefore, we will keep getting the real-time data until the script execution is terminated using Ctrl C on the MATLAB command window.
The following code implements this idea:
format shortg; y=0; while y == 0 % c = [year month day hour minute seconds] c=clock; % 將每個值四舍五入為整數(shù) c=fix(c); x.clock=c; % 訪問c的第4列,即小時 x.hours=c(:,4); % 訪問c的第5列,即分鐘 x.minutes=c(:,5); % 訪問c的第6列,即秒 x.seconds=c(:,6); % 將x轉換為JSON并寫入matlabData.json savejson('',x,'data/matlabData.json'); end
In our projects, we focus on hours, minutes, and seconds. The fix(c)
function used in the above code rounds all elements of the matrix to the nearest integer. To get hour data, we need the value of column 4 of the matrix, so we use the command c(:,4)
. Using the same method, we retrieve minutes and seconds.
We will send the clock and some separate variables to the web application separately to display the conversion of different data types from the MATLAB object to JSON. While the clock data will be converted to an array, the values ??of hours, minutes and seconds will be converted to numbers, which we will see later.
In our project, we will use the savejson()
function to convert and write variable x using JSON format and write it to the file matlabData.json
. For simplicity, the rootname
parameter will be an empty string.
Use the previous code, we complete all the required MATLAB code. Now, once we run the script, we can observe that the JSON file is created in the data folder and that the data in the file will be updated automatically and constantly. Examples of JSON file content are as follows:
{ "hours": 19, "minutes": 28, "seconds": 28, "clock": [2015,5,27,19,28,28] }
We will monitor this file and use Node.js to read the latest data. Now let's start building a web application.
Web Application
Now that our MATLAB data has been converted to JSON and stored in a file, we can read this file independently and get the data by monitoring its changes. This operation has nothing to do with MATLAB. In the rest of this article, I'll assume you understand socket.io and the MEAN stack, even if we only use some of their basic concepts.
Let's start writing web applications.
Create package.json file
To start our application, let's define the dependencies of the project. To do this, we will create a package.json
file as follows:
json = savejson(rootname, obj, filename) json = savejson(rootname, obj, opt) json = savejson(rootname, obj, 'param1', value1, 'param2', value2, ...)After creating the file, run
in the root folder of the project to install all dependencies. If you are not familiar with npm, it is recommended that you read the "NPM Getting Started Guide - Node Package Manager". npm install
Server side code This part of the code involves the use of Node.js, Express, and MongoDB. The operations performed by the server include:
Provided
- File
-
index.html
Monitor and read data in JSON files - Save data to database using MongoDB
- Send data to browser using socket.io
- We will create a file named
server.js
We use Express to provide static files:
Whenever a request is sent to
addpath('/path/to/jsonlab');, a
file stored in the /
directory will be provided. app
index.html
To monitor any changes to the file, we use
. Once a change is detected, the file is read and the data is retrieved. The whole process is completed using the following code: fs.watch()
fs.readFile()
format shortg; y=0; while y == 0 % c = [year month day hour minute seconds] c=clock; % 將每個值四舍五入為整數(shù) c=fix(c); x.clock=c; % 訪問c的第4列,即小時 x.hours=c(:,4); % 訪問c的第5列,即分鐘 x.minutes=c(:,5); % 訪問c的第6列,即秒 x.seconds=c(:,6); % 將x轉換為JSON并寫入matlabData.json savejson('',x,'data/matlabData.json'); end
Send data to the browser using socket.io's
- function
-
emit()
Save data to MongoDB using mongoose middleware - To perform the second operation, we create a schema of the data and then create a model based on that schema. This is done using the code shown below:
In the last statement of the previous code segment, we create a model based on the defined pattern. The first parameter passed to the function is the singular name of the set to which our model belongs. Mongoose automatically assigns plural names to the collection. Therefore, here
{ "hours": 19, "minutes": 28, "seconds": 28, "clock": [2015,5,27,19,28,28] }is a model of the
collection. appData
appDatas
When we get new data, we will use the latest data to create a new instance of the schema and save it to the database using the
is a document. save()
savingData
The final code for this part is as follows:
json = savejson(rootname, obj, filename) json = savejson(rootname, obj, opt) json = savejson(rootname, obj, 'param1', value1, 'param2', value2, ...)
We use try
and catch
to prevent the application from crashing. If we don't use it, and the JSON.parse
caused unexpected user input errors due to the rapid change, the application may crash. This is what we want to avoid!
Also note that please make sure the MongoDB server is running, otherwise the application will crash.
Client code
In this section, we will create a simple static HTML page. When new data is received through socket.io, we will update the data displayed on the page. This data can also be used to create real-time charts.
The following is the simple code for the index.html
file:
addpath('/path/to/jsonlab');The
ngCloak
directive is used to prevent the browser from briefly displaying the original (uncompiled) form of AngularJS template when the application is loading.
Run the application
Before starting the Node.js server, we need to make sure that the MATLAB code and the MongoDB server are running. To run the MongoDB server, you need to execute the command mongod
on the terminal. To run the Node.js server, you must execute the command node server.js
in the root directory of the project folder.
The static page showing the current time will be provided in 127.0.0.1:3000
.
Conclusion
In this article, we use the MEAN stack to create a web application that gets data in JSON format from the MATLAB program. Data is converted with the help of JSONlab. The data is then sent to the browser using socket.io, so changes on the browser are reflected in real time. The full source code for this demo is available on GitHub.
I hope you enjoyed this article and look forward to reading your comments.
(The FAQs section is recommended to handle it separately due to the length of the article. Key questions and answers can be extracted and briefly summarized or reorganized as needed.)
The above is the detailed content of Creating a Web App with MATLAB and the MEAN Stack. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

There are three common ways to initiate HTTP requests in Node.js: use built-in modules, axios, and node-fetch. 1. Use the built-in http/https module without dependencies, which is suitable for basic scenarios, but requires manual processing of data stitching and error monitoring, such as using https.get() to obtain data or send POST requests through .write(); 2.axios is a third-party library based on Promise. It has concise syntax and powerful functions, supports async/await, automatic JSON conversion, interceptor, etc. It is recommended to simplify asynchronous request operations; 3.node-fetch provides a style similar to browser fetch, based on Promise and simple syntax

JavaScript data types are divided into primitive types and reference types. Primitive types include string, number, boolean, null, undefined, and symbol. The values are immutable and copies are copied when assigning values, so they do not affect each other; reference types such as objects, arrays and functions store memory addresses, and variables pointing to the same object will affect each other. Typeof and instanceof can be used to determine types, but pay attention to the historical issues of typeofnull. Understanding these two types of differences can help write more stable and reliable code.

Which JavaScript framework is the best choice? The answer is to choose the most suitable one according to your needs. 1.React is flexible and free, suitable for medium and large projects that require high customization and team architecture capabilities; 2. Angular provides complete solutions, suitable for enterprise-level applications and long-term maintenance; 3. Vue is easy to use, suitable for small and medium-sized projects or rapid development. In addition, whether there is an existing technology stack, team size, project life cycle and whether SSR is needed are also important factors in choosing a framework. In short, there is no absolutely the best framework, the best choice is the one that suits your needs.

Hello, JavaScript developers! Welcome to this week's JavaScript news! This week we will focus on: Oracle's trademark dispute with Deno, new JavaScript time objects are supported by browsers, Google Chrome updates, and some powerful developer tools. Let's get started! Oracle's trademark dispute with Deno Oracle's attempt to register a "JavaScript" trademark has caused controversy. Ryan Dahl, the creator of Node.js and Deno, has filed a petition to cancel the trademark, and he believes that JavaScript is an open standard and should not be used by Oracle

CacheAPI is a tool provided by the browser to cache network requests, which is often used in conjunction with ServiceWorker to improve website performance and offline experience. 1. It allows developers to manually store resources such as scripts, style sheets, pictures, etc.; 2. It can match cache responses according to requests; 3. It supports deleting specific caches or clearing the entire cache; 4. It can implement cache priority or network priority strategies through ServiceWorker listening to fetch events; 5. It is often used for offline support, speed up repeated access speed, preloading key resources and background update content; 6. When using it, you need to pay attention to cache version control, storage restrictions and the difference from HTTP caching mechanism.

Promise is the core mechanism for handling asynchronous operations in JavaScript. Understanding chain calls, error handling and combiners is the key to mastering their applications. 1. The chain call returns a new Promise through .then() to realize asynchronous process concatenation. Each .then() receives the previous result and can return a value or a Promise; 2. Error handling should use .catch() to catch exceptions to avoid silent failures, and can return the default value in catch to continue the process; 3. Combinators such as Promise.all() (successfully successful only after all success), Promise.race() (the first completion is returned) and Promise.allSettled() (waiting for all completions)

JavaScript array built-in methods such as .map(), .filter() and .reduce() can simplify data processing; 1) .map() is used to convert elements one to one to generate new arrays; 2) .filter() is used to filter elements by condition; 3) .reduce() is used to aggregate data as a single value; misuse should be avoided when used, resulting in side effects or performance problems.

JavaScript's event loop manages asynchronous operations by coordinating call stacks, WebAPIs, and task queues. 1. The call stack executes synchronous code, and when encountering asynchronous tasks, it is handed over to WebAPI for processing; 2. After the WebAPI completes the task in the background, it puts the callback into the corresponding queue (macro task or micro task); 3. The event loop checks whether the call stack is empty. If it is empty, the callback is taken out from the queue and pushed into the call stack for execution; 4. Micro tasks (such as Promise.then) take precedence over macro tasks (such as setTimeout); 5. Understanding the event loop helps to avoid blocking the main thread and optimize the code execution order.
