Example of using Rust as serverMiddleware in Nuxt.js
undefinedA word of caution: As noted in the Nuxt.js presentation at Vue.js
Amsterdam 2019, the next major version of Nuxt will likely feature a new backend
services framework much better than what’s currently offered by Nuxt.js serverMiddleware.
Nevertheless, serverMiddleware can be a handy feature if you want to quickly
embed a backend API into a Nuxt application without proxying requests to a
separate API server (or resorting to programmatic Nuxt embedded in another
Node.js server). See this article by Alexander Lichter for more
considerations.
Nuxt’s underlying connect server works with Express.js-compatible
middleware, that is, a function that takes three paramaters: request,
response and next. In order to use Rust serverMiddleware, all we need is
a native Node.js module that exports a function with that signature.
The Neon bindings for Node.js make this surprisingly easy. All I had
to do to get the middleware folder of this sample repo started was typing
neon new middleware. A good hour of reading through the docs and I was able
to get a simple server middleware that adds a property to the response object:
fn middleware(mut ctx: FunctionContext) -> JsResult<JsUndefined> {
let res = ctx.argument::<JsObject>(1)?;
let next = ctx.argument::<JsFunction>(2)?;
let message = ctx.string("Hello from Rust");
res.set(&mut ctx, "neonMessage", message)?;
let args: Vec<Handle<JsValue>> = vec![];
let null = ctx.null();
next.call(&mut ctx, null, args)?;
Ok(ctx.undefined())
}
Running, in a nutshell:
yarn add global neon-cli --dev
cd middleware/
neon build
nuxt dev
Go to http://localhost:3000/.
We use cookies
We use cookies to analyze traffic and improve your experience. You can accept or reject analytics cookies.