@valera096

Почему то получаю 204 код ответа вместо 200, хотя данные должны быть?

Отправляю запрос на сервер и в обработчике получаю данные из бд через sequelize
вот код фрагмента:
const products = {
   getAll: async () => {
     let goods = await Product.findAll({raw:true})     
      .catch(err => console.log(`DataBase Error ${err}`))

    console.log(`goods`);
    console.log(goods);

    return goods;
  },


В консоле вывыдит следующее:
spoiler
[nodemon] restarting due to changes...
[nodemon] starting `node --use-strict ./src/app.js`
Server listen on localhost:80
Executing (default): SELECT 1+1 AS result
Executing (default): SELECT "id", "title", "description", "price", "pathImage" FROM "products" AS "product";
  app:db Connection has been established successfully. +0ms
goods
[
  {
    id: 1,
    title: 'newItem',
    description: 'testItem',
    price: 100,
    pathImage: null
  }
]


При запросе браузер в консоль выводит следуюющее:
res = 
appServiceData.js:10 {data: "", status: 204, statusText: "No Content", headers: {…}, config: {…}, …}
appServiceData.js:11 res.data =

????????????????????

Клиентский код:
spoiler
class AppServiceData {

  async getResourse(url) {
    const res = await axios.get(url);
    console.log('res = ');
    console.log(res);
    console.log('res.data = ');
    console.log(res.data);
    return res.data;
  };

  async getProducts() {
    let res =  await this.getResourse('http://localhost/api/products');
    return res;
  };
};


Но если в return явно отправить какой-нибудь объект то все нормално
spoiler
res = 
appServiceData.js:10 {data: "goods", status: 200, statusText: "OK", headers: {…}, config: {…}, …}
appServiceData.js:11 res.data = 
appServiceData.js:12 goods


В чем может быть причина, почему no Content?

Edit:

Код сервера:
const path = require('path');
const Koa = require('koa');
const serve = require('koa-static');
const err = require('./middleware/error');
const router = require('./middleware/api/routes');
const debug = require('debug')('app');
const send = require('koa-send');

const staticDir = path.resolve(__dirname, '..', '..', 'public');
const app = new Koa();

app.use(err);
app.use(serve(staticDir));
app.use(router.routes());
app.use(router.allowedMethods());
app.use(async ctx => await send(ctx, 'index.html', { root: staticDir }));

app.listen(3000, () => {
  console.log('Server listen on localhost:80');
});


Роутер:
const router = new Router();
const koaBody = convert(KoaBody());

  //**products endpoints */
  .post('/api/products', async ctx => {
    ctx.body = await products.addProduct();
  })
  .get('/api/products', async ctx => {
     ctx.body = await products.getAll();  
  })
  • Вопрос задан
  • 1014 просмотров
Пригласить эксперта
Ответы на вопрос 2
@vshvydky
коллбек , который исполняет коа, а то что ты его используешь понятно только из твоего комментария, на вход получает аргумент контекста
async (ctx) => {
    ctx.body = 'твой ответ'
}

так как ты завершаешь свой обработчик без маппинга данных , ты и получаешь 204 (нет контента)
думаю проблема не в коа.
Ответ написан
data: "", status: 204
data: "goods", status: 200


если в return явно отправить какой-нибудь объект то все нормално

Ваш вопрос можно перефразировать так: "почему, если отправить контент, то статус 200, а если не отправлять - 204". Ответ на него, думаю, очевиден.
Ответ написан
Ваш ответ на вопрос

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

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