2017-07-17 65 views
0

如果我从客户端发送POST如/image/cover/image/sub/,路由器功能根本不起作用,所以它发送404。它应该工作,但我从字面上不知道。我从来没有遇到过这种情况,它无缘无故。koa路由器不工作,发送404

路由器

import Router from 'koa-router' 

const router = new Router({ prefix: '/image' }) 

router.post('/cover', async (ctx, next) => { 
    let URLpath = ctx.request.body.files.cover.path 
    ctx.body = { url: URLpath } 
}) 

router.post('/sub', async (ctx, next) => { 
    let URLpath = ctx.request.body.files.sub.path 
    ctx.body = { url: URLpath } 
}) 

export default router 

日志

<-- POST /image/cover 
    --> POST /image/cover 404 33ms - 

导入代码(修订版) 路由器/ index.js 进口从 'KOA-撰写'

组成
import accountRouter from './account' 
import mypageRouter from './mypage' 
import imageRouter from './image' 
import postRouter from './post' 

const routes = [ 
    accountRouter, 
    mypageRouter, 
    imageRouter, 
    postRouter 
] 

export default() => compose([].concat(
    ...routes.map(r => [r.routes(), r.allowedMethods()]) 
)) 

app.js

import Koa from 'koa' 
import serve from 'koa-static' 
import logger from 'koa-logger' 
import views from 'koa-views' 
import session from 'koa-session' 
import passport from 'koa-passport' 
import bodyParser from 'koa-body' 
import path from 'path' 

import routes from './routes' 
import config from './config' 
import form from './util/formidable' 

import mongoose from 'mongoose' 
mongoose.Promise = global.Promise 

mongoose 
    .connect(config.MONGODB_URI) 
    .then(startApp).catch(::console.error) 

function startApp() { 
    const app = new Koa() 
    const port = process.env.PORT || 3000 
    const dist = __dirname + '/views/' 
    console.log(form) 
    const bpOption = { IncomingForm: form, multipart: true } 

    app.keys = ['secret', 'key']; 
    require('./util/passport') 

    app 
     .use(logger()) 
     .use(serve(dist)) 
     .use(session({}, app)) 
     .use(bodyParser(bpOption)) 
     .use(passport.initialize()) 
     .use(passport.session()) 
     .use(views(__dirname+'/views', { extension: 'pug'})) 
     .use(routes()) 

    app.listen(port,() => console.log(`[!] Server is Running on ${port}`)) 
} 
+0

你能分享你导入这个代码吗? –

+0

@AramilRey我刚更新了! –

回答

1

您需要帮助功能:

// @help function record route table map

'use strict'; 

const fs = require('fs'); 
const resolve = require('path').resolve; 

module.exports = function record(router, filename) { 
    const routeTable = fs.createWriteStream(resolve(__dirname, filename)); 
    routeTable.write(`Update Date: ${new Date().toString()}\n\n`); 
    for (let len = router.stack.length, i = 0; i < len; i += 1) { 
    const route = router.stack[i]; 
    routeTable.write(`URL:${route.path}\t${route.methods.join('|')}\n`); 
    } 
    routeTable.end(); 
}; 

那么你可以通过

const record = require('./record'); 
record(routeApp, '.routerc') 
涉及它

你会得到.routerc文件(路线图)的内容,如:

URL: /a/c/c POST 
URL: /b/a/d GET 

它可以帮助你解决问题。也许工作。祝你好运!