【问题标题】:sequelize associations and api routes. unable to retrieve information from db续集关联和 api 路由。无法从 db 检索信息
【发布时间】:2018-06-06 19:45:52
【问题描述】:

我对续集和表达真的很陌生,而且我已经被困了好几个小时了,我已经试图围绕我想在我的数据库中拥有的关联以及如何从我的数据库中检索信息。我创建了一个寄宿生板(如冲浪板......和骑手)数据库。我上面有三个主要模型:Boards、Riders 和 Makers。 - 一个创客有很多板,一个板只能属于一个创客。我不认为我对这个协会有任何问题。 - 一个骑手可以有多个板,一个板可以属于多个骑手。

在填充我的数据库时,我有一个 RiderBoards 表,其中包含 RiderId 和 boardId...没有问题...

有时,当我启动我的服务器时,我会收到一个 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;

感谢您在这方面的任何帮助/指导!

【问题讨论】:

  • 我相信你会检查你有进入数据库的条目。当这发生在我身上时,由于 node_env,我正在查找错误的数据库。你可以create 一个对象,然后findAll 就可以了。像这样Rider.create({...}).then(() => {Rider.findAll()...
  • 我认为我的问题是我每次都强迫真实!感谢您回答@AbhinavD!!

标签: javascript express server sequelize.js


【解决方案1】:

我终于发现了发生了什么:每次我的数据库同步时,我都在强制 true!将其更改为 true 会将我的记录保留在我的数据库中,因此当我的查询被击中时,会有实际的记录要提取。

【讨论】:

    猜你喜欢
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多