Экспресс: удалите charset = utf-8 из Content-Type "application / json; charset = utf-8" - PullRequest
0 голосов
/ 23 декабря 2019

У меня есть приложение NodeJS и экспресс-приложение. Каждый раз, когда я пытаюсь получить ответ, я получаю Content-Type: "application/json; charset=utf-8". Я не могу разобрать это на внешнем интерфейсе, так как жду ответа с заголовком Content-Type: "application/json".

Я также пробовал res.setHeader, res.set методы, но ничего не помогло. Любой совет приветствуется.

Ниже приведен мой экспресс-код:

const app = express();

configureMongoClient();

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.options('*', cors())

app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerDocument));

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET, PUT, POST');
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, X_BPI_CONTEXT');
    res.header("Content-Type", "application/json")
    next();
});
app.use("/users", usersRouter);
app.use(express.static(path.join(__dirname, "public")));

Мой внешний вызов выглядит следующим образом:

fetch(uri, {
    method: "POST",
    headers: {
      Content-Type: "application/json"
    },
    body: JSON.stringify(requestData),
  })
    .then((response) => {
      debugger;
      return response.json()
    }) .then((data) => {
        console.log(data);
      });

1 Ответ

1 голос
/ 23 декабря 2019

Экспресс установит кодировку для вас. Поэтому, если вы хотите обойти это, не используйте экспресс-методы, поскольку res расширяется от: http.ServerResponse, вы можете использовать .writeHeader & .write.

Объект res являетсярасширенная версия собственного объекта ответа Node и поддерживает все встроенные поля и методы.

res.writeHeader(200, { 'Content-Type': 'application/json' })
res.write(JSON.stringify(object))
res.end()

В любом случае, лучше добавить кодировку, и я предлагаю вам внести изменения во фронтконец вместо.

...