试图获取json数据,得到“非函数”错误

时间:2018-03-24 16:13:54

标签: javascript node.js postgresql express pg-promise

我正在创建一个程序员工作板应用程序,我正在尝试在我的主页面上显示json数据。在某些时候我会渲染它,但是现在我只是想让它以json形式出现,以便我知道它有效。

我能够连接到服务器,但是当我加载页面时,我得到一个TypeError(Job.showAllJobs不是函数)。

我正在使用我在另一周作为参考的crud应用程序,但它和这个项目之间存在一些让我失望的差异。

这是我项目的文件结构:

  

作业板

     
      
  • 数据库

         
        
    • connection.js
    •   
    • schema.sql文件
    •   
  •   
  • 模型

         
        
    • Job.js
    •   
    • user.js的
    •   
  •   
  • 视图

         
        
    • index.ejs
    •   
    • login.ejs
    •   
  •   
  • server.js

  •   

与我以前的crud应用程序不同,这个项目使用的是一个先前遇到麻烦的connection.js文件。起初我以为自己已经走出了困境,但我认为这可能是我当前问题的原因。

没有让GET工作可能看起来像是一个小错误,但它真的让我烦恼,因为它而无法继续工作。

我将我的表(作业)填入样本列表作为测试,但在不久的将来,我计划将应用程序连接到GitHub作业api。

server.js:

const express = require('express');
const app = express();
const PORT = 3000;
const bodyParser = require('body-parser');
const methodOverride = require('method-override');
const Job = require('./models/Job');
const User = require('./models/User');
const connection = require('./database/connection')

app.use(bodyParser.json())

app.use(methodOverride('_method'));

const urlencodedParser = bodyParser.urlencoded({ extended: false })

app.set("view engine", "ejs");

///// GET /////

// GET INDEX
app.get('/', (request, response) => {
  Job.showAllJobs().then(everyJob => {
    response.json('index');
    // response.render('index', { jobs: everyJob });
  });
});

Job.js

const Job = {};

const db = require('../database/connection');

///// JOBS /////


/// INDEX ///
Job.showAllJobs = () => {
  return db.any('SELECT * FROM jobs');
};

module.exports = Job;
module.exports = db;

connection.js

// require database setup to use pg-Promise
const pgp = require('pg-promise')({});

// connection url
const connectionURL = "postgres://localhost:5432/job_board";

// new database connection
const db = pgp(connectionURL);

// module.exports = db;

1 个答案:

答案 0 :(得分:1)

你有几个问题。

  • 确保您已将作业传递到res.json而不是字符串'索引'
  • 确保您从db
  • 导出connection.js
  • 您要从Job导出dbJob.js。由于您要导出db秒,它会覆盖Job的导出。