Nodejs 关于koa的route

Nodejs 关于koa的route

一般的路由规则都会写在app.js里面,如下: var route = require(‘koa-route’); app.use(route.get(’/’, index)); app.use(route.get(’/register’, register)); 我现在想要把所有的路由规则写进一个js里面再调用: var router = require(’./routes/index’); app.use(router); ####相应的文件:./routes/index####### var route = require(‘koa-route’); function *router(){ app.use(route.get(’/’, index)); app.use(route.get(’/register’, register)); } function *index(){ this.body = ‘index’; } module.exports = router; 这样的结果是,页面都是 not found,404的错误。请问这个是为什么?要如何解决呢?


3 回复

您提到的问题在于对 Koa 框架的路由机制理解不够深入。Koa 的路由需要通过一个中间件来处理,而不仅仅是简单地定义函数。您当前的代码中,router 函数并没有正确地返回或使用路由中间件。

解决方案

  1. 使用 koa-router:这是一个更常见的选择,它提供了更强大的路由功能。
  2. 修正代码:如果坚持使用 koa-route,则需要调整代码以正确设置路由中间件。

使用 koa-router

首先,安装 koa-router

npm install koa-router

然后,修改您的代码如下:

app.js

const Koa = require('koa');
const app = new Koa();
const router = require('./routes');

// 使用路由中间件
app.use(router.routes()).use(router.allowedMethods());

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

./routes/index.js

const KoaRouter = require('koa-router');

const router = new KoaRouter();

// 定义路由
router.get('/', (ctx) => {
    ctx.body = 'index';
});

router.get('/register', (ctx) => {
    ctx.body = 'register';
});

module.exports = router;

如果坚持使用 koa-route

app.js

const Koa = require('koa');
const app = new Koa();
const route = require('koa-route');
const routes = require('./routes');

// 使用路由中间件
app.use(routes);

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

./routes/index.js

const route = require('koa-route');

async function index(ctx) {
    ctx.body = 'index';
}

async function register(ctx) {
    ctx.body = 'register';
}

function initRoutes(app) {
    app.use(route.get('/', index));
    app.use(route.get('/register', register));
}

module.exports = initRoutes;

总结

使用 koa-router 是更推荐的方式,因为它提供了一个更强大且易于使用的路由系统。如果您确实需要使用 koa-route,请确保正确地将路由中间件应用到 Koa 应用程序上。这样可以避免 404 错误,并使路由逻辑更加清晰和模块化。


1、载入koa-route中间件 2、自己写一个中间件并且将koa-route路由 3、然后在自己的中间件写路由并且返回route

app.js

   var koaRoute = require(‘koa-route’);
   require('/routes')(app,koaRoute);

/routes/index.js

 module.exports=function(app,koaRoute){
  		app.use(koaRoute.get('/',function* (){
		     this.body="hello world"; 
		}));
}

你当前的问题在于将路由配置封装在一个函数中,但没有正确地使用这些函数来构建路由实例。koa-route需要直接定义路由规则,而不是将其封装在一个生成器函数中。你可以直接在./routes/index.js文件中定义路由,并导出一个Koa Router实例。

示例代码

首先安装koa-router

npm install koa-router

然后修改你的代码:

app.js

const Koa = require('koa');
const app = new Koa();
const router = require('./routes');

app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

./routes/index.js

const Router = require('koa-router');

const router = new Router();

router.get('/', (ctx) => {
  ctx.body = 'index';
});

router.get('/register', (ctx) => {
  ctx.body = 'register';
});

module.exports = router;

解释

  1. app.js

    • 引入并创建Koa应用实例。
    • 引入并使用路由模块。router.routes()会自动挂载所有路由规则到应用。
    • router.allowedMethods()会根据路由规则添加适当的HTTP方法响应头(例如405 Method Not Allowed)。
  2. ./routes/index.js

    • 创建一个新的koa-router实例。
    • 定义路由规则,使用router.get方法。
    • 导出路由实例。

通过这种方式,你可以将路由规则集中管理,而不会影响到应用的其他部分。这样可以使得代码更加清晰和易于维护。

回到顶部