Ошибка ссылки: [имя таблицы] не определено |Node.js, Express, Axios, PostgreSQL - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь создать веб-приложение, и у меня действительно возникают проблемы с подключением к базе данных.

В настоящее время я работаю с его руководством:

https://scotch.io/tutorials/getting-started-with-node-express-and-postgres-using-sequelizeИ мой клиент, а также сервер работают.

Но теперь я должен сделать доступ к базе данных.По этой причине я использую Postman для проверки своих POST- и GET-операторов.

Каждый раз, когда я пытаюсь выполнить следующее GET-выражение:

localhost: 8000 / api /инструменты

Я просто получаю

ReferenceError: Tools is not defined
              <br>    at list (server\controllers\tools.js:17:5)
              <br>    at Layer.handle [as handle_request] (server\node_modules\express\lib\router\layer.js:95:5)
              <br>    at next (server\node_modules\express\lib\router\route.js:137:13)
              <br>    at Route.dispatch (server\node_modules\express\lib\router\route.js:112:3)</p>
</blockquote>

<p>And I really don't get why it always says "Tools is not defined".
I have a database scheme called "public".
So maybe that could be a thing? 
I also tried to set database to public.[DATABASENAME] but it doesn't changed a thing. </p>

<p>I hope you guys can help me and I described the case good enough.</p>

<p>My files for that looks like that:</p>

<p><strong>/server/config/config.json</strong></p>

<pre><code>{
  "development": {
    "username": "[USERNAME]",
    "password": "[PASSWORD]",
    "database": "testdb",
    "host": "localhost",
    "port": [PORT],
    "dialect": "postgres"
  }
</code>

/ route / index.js

const toolsController = require('../controllers').tools;
const toolitemsController = require('../controllers').toolitems;

module.exports = (app) => {
  app.get('/api', (req, res) => res.status(200).send({
    message: 'Welcome to the tools API!',
  }));

  app.post('/api/tools', toolsController.create);
  app.get('/api/tools', toolsController.list);
  app.get('/api/tools/:toolId', toolsController.retrieve);
  app.put('/api/tools/:toolId', toolsController.update);
  app.delete('/api/tools/:toolId', toolsController.destroy);

  app.post('/api/tools/:toolId/items', toolitemsController.create);
  app.put('/api/tools/:toolId/items/:toolitemId', toolitemsController.update);
  app.delete(
    '/api/tools/:toolId/items/:toolitemId', toolitemsController.destroy
  );
  app.all('/api/tools/:toolId/items', (req, res) => res.status(405).send({
    message: 'Method Not Allowed',
  }));
};

/ server / controllers / tools.js

const tool = require('../models').tool;
    const toolitem = require('../models').toolitem;

    module.exports = {
      create(req, res) {
        return Tools
          .create({
            tool_id: req.body.tool_id,
            tool_name: req.body.tool_name,
            status: req.body.status
          })
          .then((tools) => res.status(201).send(tools))
          .catch((error) => res.status(400).send(error));
      },

      list(req, res) {
        return Tools
          .all()
          .then(tools => res.status(200).send(tools))
          .catch(error => res.status(400).send(error));
      },
    };

отредактированная версия / server / controllers / tools.js

const tools = require('../models').tools; const toolitem = require('../models').toolitem; module.exports = { create(req, res) { return tools .create({ tool_id: req.body.tool_id, tool_name: req.body.tool_name, status: req.body.status }) .then((tools) => res.status(201).send(tools)) .catch((error) => res.status(400).send(error)); }, list(req, res) { return tools .all() .then(tools => res.status(200).send(tools)) .catch(error => res.status(400).send(error)); }, /* list(req, res) { return tool .findAll({ include: [{ model: toolitem, as: 'toolitems', }], order: [ ['createdAt', 'DESC'], [{ model: toolitem, as: 'toolitems' }, 'createdAt', 'ASC'], ], }) .then((tools) => res.status(200).send(tools)) .catch((error) => res.status(400).send(error)); },*/ retrieve(req, res) { return tools .findById(req.params.toolId, { include: [{ model: toolitem, as: 'toolitems', }], }) .then((tools) => { if (!tools) { return res.status(404).send({ message: 'tools Not Found', }); } return res.status(200).send(tools); }) .catch((error) => res.status(400).send(error)); }, update(req, res) { return tools .findById(req.params.toolId, { include: [{ model: toolitem, as: 'toolitems', }], }) .then(tools => { if (!tools) { return res.status(404).send({ message: 'tools Not Found', }); } return tools .update({ title: req.body.title || tool.title, }) .then(() => res.status(200).send(tools)) .catch((error) => res.status(400).send(error)); }) .catch((error) => res.status(400).send(error)); }, destroy(req, res) { return tools .findById(req.params.toolId) .then(tools => { if (!tools) { return res.status(400).send({ message: 'tool Not Found', }); } return tools .destroy() .then(() => res.status(204).send()) .catch((error) => res.status(400).send(error)); }) .catch((error) => res.status(400).send(error)); }, };

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Проблема:

ReferenceError: Инструменты не определены

at list (server\controllers\tools.js:17:5)

Сама проблема объясняется, файл является инструментами.js и строка № - 17.

Здесь вы импортировали

const tool = require('../models').tool;

и используете

Tools.create(...

Решение: измените это на

tool.create(
0 голосов
/ 12 декабря 2018

Вы создали модель Tools?Эта ошибка очень похожа, когда мы забываем создать модель.

node_modules/.bin/sequelize model:generate --name Tools --attributes field1:string,field2:string,field3:integer

Когда мы используем Sequelize, нам нужно создать модель и после этого запустить миграцию.

Следуйте документации: http://docs.sequelizejs.com/manual/tutorial/migrations.html

...