Node api префикс всех маршрутов с /api

#node.js #express

#node.js #экспресс

Вопрос:

есть ли лучший способ префикса всех маршрутов с /something, чем этот?
app.use('/api/users', require('./routes/users'));

app.use('/api/books', require('./routes/books'));

app.use('/api/authors', require('./routes/authors'));

Это также будет работать при использовании маршрутов в моем server.js с помощью app.get()/post()/...

Ответ №1:

Если все ваши маршруты имеют префикс by /api , я полагаю, вы могли бы использовать function .

 function api(route) {
  return `/api/${route}`;
}

app.use(api('users'), require('./routes/users'));
app.use(api('books'), require('./routes/books'));
app.use(api('authors'), require('./routes/authors'));
  

При этом /api префикс может быть ненужным. Вы могли бы просто опустить его:

 app.use('/users', require('./routes/users'));
app.use('/books', require('./routes/books'));
app.use('/authors', require('./routes/authors'));
  

Комментарии:

1. Допустим, у меня есть веб-сайт website.com и папка, которая содержит другой веб-сайт, что-то вроде проекта. Поэтому я бы website.com/project это позволило бы отобразить веб-сайт проекта и website.com/project/api — это был бы путь к API, с помощью которого я бы делал запросы.

Ответ №2:

Вам нужно добавить { mergeParams: true } в дочерний маршрутизатор.

 // app.js
import routes from './routes'

const API_PREFIX = '/api'
app.use(API_PREFIX, routes)
  
 // routes.js
import { Router } from 'express'
import users from './users'
import books from './books'
import authors from './authors'

const router = Router({ mergeParams: true })

router.use(users)
router.use(books)
router.use(authors)

export default router