Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
@nexum-ag/next-router
Advanced tools
A routing library for Next.js
npm install @nexum-ag/next-router
This library is inspired by and works very similar than next-routes. It works with a custom server or with Next.js 9 file system routing.
import { Link, Router } from '@nexum-ag/next-router';
Create a file like routes.config.(ts|js)
and paste the following:
import { Routes, init } from '@nexum-ag/next-router';
const routes: Routes = {
'user': {
pattern: '/user',
page: '/user',
},
'home': {
pattern: '/',
page: '/index',
}
};
init(routes);
We look at one route defininion:
'user': { // This is the route name
pattern: '/user', // This is the url pattern to call the page
page: '/user', // This is the next page (pages/user.js or pages/user/index.js)
},
The pattern can be anything that path-to-regexp understands.
So a route with an optional parameter would be /user/:name?
for example.
path-to-regexp by the way is the same library that express is using for the routing.
Import the routes config file once in your application. (e.g. Custom App component)
You can use next-router Link component instead of the next/link.
import 'routes.config'; // import this only once and before using Link
import { Link } from '@nexum-ag/next-router';
// /user pattern
<Link route="user">
<a>Got to User page</a>
</Link>
// /user/:name pattern
<Link route="user" params={{ name: 'stefan' }}>
<a>Got to User detail page</a>
</Link>
If you use this HOC the query params and route information will be available in getInitialProps
and useRouter
hook.
// _app.tsx
import React from 'react';
import App from 'next/app';
import '../routes.config';
import { withNextRouter } from '@nexum-ag/next-router';
class MyApp extends App {
render() {
const { Component, pageProps } = this.props;
return <Component {...pageProps} />;
}
}
export default withNextRouter(MyApp);
// next page example
Page.getInitialProps = async ({ query }) => {
// query contains the matched route params + get params
return { query };
}
// useRouter hook example
import React from 'react';
import { useRouter } from '@nexum-ag/next-router';
const Component = props => {
const { route, params, query } = useRouter();
return (
<>
<h1>Route: {route}</h1>
<p>params:</p>
{JSON.stringify(params)}
<p>query:</p>
{JSON.stringify(query)}
</>
);
}
You can pass a custom Router class, Link component or getRouterMatchFunction to the init function if you need to.
They will be used instead of the built ins with import { Link, Router } from '@nexum-ag/next-router';
.
import { Routes, init } from '@nexum-ag/next-router';
const routes: Routes = {
...
};
init(routes, YourRouterClass, YourLinkFactory, yourGetRouterMatchFunction);
If you use a custom server you can create more complex routes and are not limited by what you can do with Next.js default routing.
Disable file-system routing
// next.config.js
module.exports = {
useFileSystemPublicRoutes: false,
}
// server.js
const express = require('express');
const next = require('next');
require('./routes.config');
const Router = require('@nexum-ag/next-router').Router;
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
const render = (req, res, page, params, query, route) => app.render(req, res, page, params);
app.prepare().then(() => {
const server = express();
server.use(Router.getRequestHandler(render));
server.all('*', (req, res) => {
return handle(req, res);
})
server.listen(port, err => {
if (err) throw err
console.log(`> Ready on http://localhost:${port}`);
})
});
You can use the same events you know from the original next/router. But instead of the url you get an object with the route information. (from type CurrentRoute)
import { Router } from '@nexum-ag/next-router';
const handleRouteChange = route => {
console.log('App is changing to route: ', route);
};
Router.events.on('routeChangeStart', handleRouteChange);
next-router is MIT licensed.
FAQs
A routing library for Next.js
The npm package @nexum-ag/next-router receives a total of 0 weekly downloads. As such, @nexum-ag/next-router popularity was classified as not popular.
We found that @nexum-ag/next-router demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.