ShadowOfCasper
@ShadowOfCasper
Middle User Interface Web Developer

Почему express на любой post отвечает 404?

У меня есть девсервер, на котором я пишу front-end проекта.
Он существует обособленно от реального сервера (опустим причины - поднять yiiшный серверный код проекта на локалке непросто). Чтобы проверять работоспособность интерфейся я запрашиваю express, а точнее статические json в папке jsondata.
GET-запросы отрабатывают нормально - я получаю в ответ нужые данные, но стоит мне заменить get на post и express возвращает 404, хотя путь остаётмя прежним. В чём причина?
Заводится он по таску в gulp:
'use strict';

const http = require("http");
const express = require('express');
const reload = require('reload');
const path = require('path');
module.exports = function(gulp, plugins, args, config, taskTarget, server) {
  gulp.task('express', function() {
    let options = {
      dotfiles: 'ignore',
      etag: false,
      extensions: ['htm', 'html'],
      index: false,
      maxAge: '1d',
      redirect: false,
      setHeaders: function (res, path, stat) {
        res.set('x-timestamp', Date.now())
      }
    }
    server.use(express.static("../web", options));
    server.listen(3000)
  }); 
};
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
JimmDiGreez
@JimmDiGreez
Full-stack Developer
Потому что serve-static, по соображениям здравого смысла, работает только с GET и HEAD запросами.
Кусочек кода, который за это овтечает быстренько нашелся прямо в индексе:
https://github.com/expressjs/serve-static/blob/mas...

Вообще не ясно, зачем к статике обращаться POST глаголом, это противоречит здравому смыслу действительно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ShadowOfCasper
@ShadowOfCasper Автор вопроса
Middle User Interface Web Developer
копаясь в доках экспресса вычитал что можно отслеживать запросы через что-то вроде регулярки. server.post('/*')
И накатал такую штуку. Похоже на то, что колбэк работает и отвечает на post адекватно.
server.post("/*", function(req, res){
      res.sendFile(path.join(__dirname, "../../web", req.url))
    });
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы