Nodejs - если путь / api - обслуживать api, если нет - обслуживать статические файлы - PullRequest
0 голосов
/ 01 сентября 2018

Моя проблема кажется мне сложной, но я думаю, что она проста для опытных разработчиков nodejs. Все, что я хочу, это чтобы мой API отвечал на вызовы API только в том случае, если URL-адрес равен /api/~, но если любой другой - / или /somethingElse или что-то еще - обслуживает статические файлы.

Мой код:

var app = express();

app.get("/api/users", function (req, res) {
    getUsers(function (err, users) {
        if (err) {
            return res.status(500).send('Error');
        }

        return res.json(users);
    });
});

app.get("/api/user/:_id", function (req, res) {
    getUserById(req.params._id, function (err, user) {
        if (err) {
            return res.status(500).send('Error');
        }

        return res.json(user);
    });
});

Спасибо

Ответы [ 3 ]

0 голосов
/ 01 сентября 2018

Из того, что я могу сказать, вы ищете express.static

Настройка директории для обслуживания статических файлов

Предположим, у вас есть «публичный» каталог, содержащий статические активы.

1008 * общественное *

  • IMG
    • img1.png
    • img2.png
  • CSS
    • style.css

Вот как сделать их доступными:

const path = require('path')

express.use(express.static(path.join(__dirname, 'public')))

Примечание: Ваш путь к общедоступному каталогу может находиться в другом месте, просто добавьте соответствующие аргументы пути в path.join().

Теперь будет доступно следующее:

  • / IMG / img1.png
  • / IMG / img2.png
  • / CSS / style.css

См. Экспресс дос для статических файлов

Экспресс-роутер

Теперь, поскольку вы хотите использовать различные маршруты, начинающиеся с /api, может оказаться полезным использовать express.Router. Создайте express.Router() для каждого базового пути. Например, создайте файл с именем apiRouter для маршрутов, начинающихся с '/ api'. Как только маршрутизатор определен, просто наберите app.use() с базовым путем и apiRouter:

let apiRouter = express.Router()

// GET /api/users
apiRouter.get('/users', (res, res, next) => {})

// GET /api/users/:id
apiRouter.get('/users/:id', (req, res, next) => {})

// prefix apiRouter with '/api'
app.use('/api', apiRouter)
0 голосов
/ 01 сентября 2018

После всех ваших маршрутов API вам нужно определить / route, который обслуживает статические файлы

В вашем случае:

app.get("/api/users", function (req, res) {
   ...
});

app.get("/api/user/:_id", function (req, res) {
    ...
});


app.use('/', express.static(path.join(__dirname, './'))); // or whatever path you need

Подробнее в официальных документах .

0 голосов
/ 01 сентября 2018

Я не понимаю твоего слова 100% .. Я думаю, ваше слово.

Я думаю, что вы подключаете статические файлы, когда не api url страница. Если это правильно, вы нажимаете эту страницу. Как я могу получить Express.js до 404 только на отсутствующих маршрутах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...