second-state / wasmedge-nodejs-starter

A template project to run Rust functions in Node.js through the Second State WebAssembly engine.
https://www.secondstate.io/articles/getting-started-with-rust-function/
161 stars 410 forks source link
codespaces getting-started github-actions javascript node-js nodejs rust rust-lang second-state ssvm ssvmup vscode vscode-codespaces webassembly webassembly-tutorial

Info

This project is no longer updated. If you are interested in using javascript, please refer to the wasmedge-quickjs repo

Getting started

Build and test

Fork this project to create your own Rust functions as a web service.

How it works

Setup

It is easy to use our appdev Docker image to run the dev environment. You can choose from x86_64 or aarch64 versions of the image. Alternatively, you could also use Github Codespaces to run the following example.

$ docker pull wasmedge/appdev_x86_64
$ docker run -p 3000:3000 --rm -it -v $(pwd):/app wasmedge/appdev_x86_64
(docker) #

Build

Use the rustwasmc command to build the Rust function into a WebAssembly bytecode file.

(docker) # cd /app
(docker) # rustwasmc build

Test and debug

From the first terminal window, start the Node.js application.

(docker) # node node/app.js

From a second terminal window, you can test the local server.

$ curl http://localhost:3000/?name=WasmEdge
hello WasmEdge

Optional: Upload to the FaaS and test

Upload the wasm file in the pkg folder to the FaaS. Double check the .wasm file name before you upload.

(docker) # curl --location --request POST 'https://rpc.ssvm.secondstate.io:8081/api/executables' \
--header 'Content-Type: application/octet-stream' \
--header 'SSVM-Description: say hello' \
--data-binary '@pkg/hello_lib_bg.wasm'

The FaaS returns

{"wasm_id":161,"wasm_sha256":"0xfb413547a8aba56d0349603a7989e269f3846245e51804932b3e02bc0be4b665","usage_key":"00000000-0000-0000-0000-000000000000","admin_key":"00xxxxxx-xxxx-xxxx-xxxx-4adc960fd2b8"}

Make a function call via the web.

(docker) # curl --location --request POST 'https://rpc.ssvm.secondstate.io:8081/api/run/161/say' \
--header 'Content-Type: text/plain' \
--data-raw 'Second State FaaS'
hello Second State FaaS

You can easily incorporate this web service into your HTML web pages. See how

More exercises

Now, you can copy and paste code from this project.

Read more:

Resources

Brought to you by the Open source dev team at Second State. Follow us on Twitter, Facebook, LinkedIn, YouTube, or Medium