ReferenceError:[表名]未定义| Node.js,Express,Axios,PostgreSQL

时间:2018-12-12 11:43:52

标签: node.js postgresql express sequelize.js axios

我正在尝试构建Web应用程序,但是在数据库连接方面确实遇到了问题。

我目前正在使用他的教程:

https://scotch.io/tutorials/getting-started-with-node-express-and-postgres-using-sequelize 我的客户端和服务器都在工作。

但是现在我必须进行数据库访问。因此,我使用Postman来尝试我的POST和GET语句。

每次尝试以下GET语句时:

  

localhost:8000 / api / tools

我刚得到

  

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

我真的不明白为什么它总是说“未定义工具”。 我有一个名为“ public”的数据库方案。 所以也许这可能是一件事? 我还尝试将数据库设置为public。[DATABASENAME],但它并没有改变。

希望大家能帮助我,我对案件的描述足够好。

我为此的文件如下:

/server/config/config.json

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

/routes/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 :(得分:0)

您是否创建了工具模型?当我们忘记创建模型时,此错误非常相似。

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

使用Sequelize时,我们需要创建一个模型,然后运行迁移。

遵循文档:http://docs.sequelizejs.com/manual/tutorial/migrations.html

答案 1 :(得分:0)

问题:

  

ReferenceError:未定义工具

In [2468]: df.value2 = df['value2'].apply(str)

In [2494]: res = df.groupby('value1')['value2'].apply(lambda x:','.join(x)).reset_index()

In [2498]: res['count'] = df.groupby('value1').size().reset_index()[0]

In [2499]: res
Out[2499]: 
   value1 value2  count
0       1  1,4,5      3
1       2    3,1      2

问题本身说明,文件为tools.js,行号为17。

您已经在这里导入

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

您正在使用

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

解决方案:将其更改为

Tools.create(...