2016-02-09 7 views
6

मेरे पास दो इकाइयां, उपयोगकर्ता और कर्मचारी हैं। तो मैं अलग-अलग अंतराल में दोनों के लिए सीआरयूडी चाहता हूं, लेकिन उनमें से दोनों को "एपीआई" के तहत रखा जाएगा, इसलिए मैं api_v1, api_v2 और अन्य को परिभाषित कर सकता हूं। अंतिमबिंदुओं होगा कुछ की तरह:आरईएसटी एपीआई। कई राउटर के लिए सामान्य उपसर्ग

get api/users 
put api/users/12 
delete api/users/12 
get api/employees 
.... 

मैं नहीं मिल सकता है मेरी मार्गों दोनों के लिए "API" उपसर्ग। यह कोआ-माउंट के साथ काम नहीं कर सकता है।

मेरी फ़ाइलें:

server.js

// Dependencies 
import Koa from 'koa' 
import mongoose from 'mongoose' 
import logger from 'koa-logger' 
// import parser from 'koa-bodyparser'; 
import convert from 'koa-convert' 
import serve from 'koa-static' 
import Router from 'koa-router' 
import session from 'koa-generic-session' 
import mount from 'koa-mount' 

// A seperate file with my routes. 
import routingUsers from './users' 
import routingEmployees from './employees' 

// config 
const config = require("./config/config") 

// connect to the database 
mongoose.connect(config.mongo.url) 
mongoose.connection.on('error', console.error) 

// Creates the application. 
const app = new Koa() 
// how to use koa-mount to make this work? Arghhhhh! 
// const api = new Koa(); 
// api.use(convert(mount ('/api', app))) 

// trust proxy 
app.proxy = true 
// sessions 
app.keys = ['your-session-secret'] 


// Applies all routes to the router. 
const user = routingUsers(Router()) 
const employee = routingEmployees(Router()) 

app 
    .use(logger()) // log requests, should be at the beginning 
    .use(user.routes()) // asign routes 
    .use(employee.routes()) // asign routes 
    .use(user.allowedMethods()) 
    .use(employee.allowedMethods()) 
    .use(convert(session())) // session not needed for an API?????? 
    .use(convert(serve(__dirname + '/public'))) // for static files like images 


// Start the application. 
app.listen(3000,() => console.log('server started 3000')) 
export default app 

users.js (employees.js एक ही है)।

// Export a function that takes the router 
export default router => { 
    // Set a prefix of our api, in this case locations 
    const api = 'users' 
    router.prefix(`/${api}`); 

    // GET to all locations. 
    router.get('/', (ctx, next) => 
     ctx.body = 'hello users'); 
    // ctx.body = await Location.find()); 
    // POST a new location. 
    router.post('/', async (ctx, next) => 
    ctx.body = await new Location(ctx.request.body).save()); 
    // Routes to /locations/id. 
    router.get('/:id', async (ctx, next) => 
    ctx.body = await Location.findById(ctx.params.id)); 
    // PUT to a single location. 
    router.put('/:id', async (ctx, next) => 
    ctx.body = await Location.findByIdAndUpdate(ctx.params.id, ctx.body)); 
    // DELETE to a single location. 
    router.delete('/:id', async (ctx, next) => 
    ctx.body = await Location.findByIdAndRemove(ctx.params.id)); 

    return router; 
} 

उत्तर

1

अंत में मैं रूटर मॉड्यूल के लिए एक और पैरामीटर भेज दिया है, तो मैं रूटर उपसर्ग प्रयोग किया है:

// Applies all routes to the router. 
const user = routingUsers(Router(), 'api/users/') 
const employee = routingEmployees(Router(), 'api/employees/') 

उपयोगकर्ता होगा:

export default (router, prefix) => { 
    // Set a prefix of our api, in this case locations 
    // const api = 'users' 
    router.prefix(`/${prefix}`); 
.... 
0

मैं निम्नलिखित समाधान का उपयोग करें:

import Router from 'koa-router'; 

const router = new Router() 
    .get('/', function(ctx) { 
    ctx.body = 'Index'; 
    }); 


const apiRouter = new Router({ 
    prefix: '/api' 
}) 
    .get('/templates', Templates.index) 
    .post('/templates', Templates.store) 
    .put('/templates', Templates.update) 
    .get('/lists', Lists.index); 


router.use(apiRouter.routes()); 
संबंधित मुद्दे