Sequelize ассоциации и маршруты API.невозможно получить информацию из БД - PullRequest
0 голосов
/ 06 июня 2018

Я действительно новичок в секвенции и выражении, и я уже много часов застрял, пытаясь обернуть голову вокруг ассоциаций, которые я хочу иметь в моей базе данных, и как получить информацию из моей базы данных.Я создал базу данных по бордерс-бордам (как в досках для серфинга ... и райдерам).У меня есть три основные модели: доски, всадники и производители.- У производителя много досок, и доска может принадлежать только производителю.Я не думаю, что у меня есть какие-либо проблемы с этой ассоциацией.- У гонщика может быть много досок, и доска может принадлежать многим гонщикам.

При заполнении базы данных у меня есть таблица RiderBoards с riderId иboardsId ... никаких проблем там нет ...

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

СЕЙЧАС, в моем маршруте api / riders я пытаюсь получить массив со всеми объектами моего райдера, используя метод "findAll ()".Это не дает мне ничего, кроме пустого массива.Это проблема с моей базой данных или ассоциациями?Это проблема с моим маршрутом API?Это проблема подключения к моей базе данных?Как я могу получить то, что я хочу?Я был бы очень признателен за некоторые рекомендации по этому вопросу.

это мой маршрут api / riders:

const router = require('express').Router();
const asyncHandler = require('express-async-handler');
const { Rider } = require('../database/index');

router.get(
  '/',
  asyncHandler(async (req, res, next) => {
    const allRiders = await Rider.findAll();
    if(allRiders.length === 0){
      console.log(allRiders);
      res.json('No Riders found')
    }else{
      console.log(allRiders);
      res.json({allRiders});
    }
    /* etc */
  })
);
router.post('/', function (req, res, next) {
  /* etc */
});
router.put('/:puppyId', function (req, res, next) {
  /* etc */
});
router.delete('/:puppyId', function (req, res, next) {
  /* etc */
});

module.exports = router;

это мой индекс к моим моделям БД:

"use strict";

const db = require("./db");
const Board = require("./board");
const Rider = require("./rider");
const Maker = require("./maker");

// Assosiations go here
Maker.hasMany(Board);
// Rider.hasMany(Board);
Board.belongsTo(Maker);
Board.belongsToMany(Rider,{through: 'RiderBoards'});
Rider.belongsToMany(Board,{through:'RiderBoards'});

module.exports = {
  db,
  Board,
  Rider,
  Maker
};

это мой индекс на стороне сервера:

const express = require("express");
const session = require("express-session"); // sessions allow us to keep user autheticated even after refreshing their browser window
const app = express();
const morgan = require("morgan");
const path = require("path");
const apiRoutes = require("./api");
const db = require("./database/db");
const passport = require("passport");

const SequelizeStore = require("connect-session-sequelize")(session.Store);
const dbStore = new SequelizeStore({ db: db });

dbStore.sync();

//logging middleware

app.use(morgan("dev"));

//static middleware
app.use(express.static(path.join(__dirname, "../public")));
app.use(express.json());
app.use(express.urlencoded({ extended: true })); // The “extended” syntax allows for rich objects and arrays to be encoded into the URL-encoded format

app.use('/api', apiRoutes);

app.use(
  session({
    secret: process.env.SESSION_SECRET || "Some insecurely saved secret", // the process.env.SESSION_SECRET allows us to use the secret from the enviroment variable instead of exposing our own secret
    resave: false,
    saveUninitialized: false,
    store: dbStore
    // duration: -> how long willthe session be alive for
    // activeDuration: INT -> before logging an user out, it allows INT extra time if require by the user
  })
);

app.use(passport.initialize()); // We initilize passport so that it will consume our req.session object, and attach the user to the request object.
app.use(passport.session());

app.get("*", (req, res, next) => {
  res.sendFile(path.join(__dirname, "../public/index.html"));
});

app.use((req, res, next) => {
  console.log(err);
  console.log(err.stack);
  res.status(err.status || 500).send(err.message || "internal server error.");
});

module.exports = app;

Спасибо за любую помощь / руководство в этом!

1 Ответ

0 голосов
/ 07 июня 2018

Я наконец узнал, что происходит: я заставлял true каждый раз, когда моя база данных синхронизировалась!Если изменить его на true, мои записи были сохранены в моей базе данных, поэтому при нажатии на мой запрос оставались фактические записи.

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