2016-09-03 5 views
3

Я пытаюсь создать запрос с помощью knex, используя postgres как базу данных. Однако, когда я запускаю код он постоянно спрашиватьknex query продолжает запрашивать установку модуля sqlite

Error: Cannot find module 'sqlite3'

Даже если я добавил pg к моему knexfile.

Запрос

var data = { 
    id: leagueId, 
    slug: leagueSlug, 
    createdAt: new Date() 
}; 
var query = knex('league').insert(data).toString(); 
query += ' on duplicate key update ' + knex.raw('createdAt= ?, id = ?',[new Date(), id]); 

knex.raw(query); 

knexfile

module.exports = { 
    development: { 
    client: 'pg', 
    connection: { 
     user: 'test', 
     database: 'test' 
    } 
    }, 
    production: { 
    client: 'pg', 
    connection: process.env.DATABASE_URL 
    } 
}; 

index.js

var express = require('express'); 
var request = require('request'); 
var parse = require('body-parser'); 
var knex = require('knex'); 
var Log = require('log'); 
var router = express.Router(); 
var log = new Log('info'); 



    /* Retrieve and save leagues*/ 
    router.get('/api/league', function(req, res, next) { 

    /* exclude slugs */ 
    var excludedSlugs = [ 'eu-cs', 'na-cs', 'iwc', 'all-star']; 

    request({ 
    method: 'GET', 
    uri: 'http://test', 
    headers: { 
    'Content-Type': 'application/json', 
    'dataType': 'json'} 
}, function (error, response, body){ 
    if(!error && response.statusCode == 200){ 

    var bodyJSON = JSON.parse(body); 
    var leagueObjects = bodyJSON["leagues"]; 

    for(var objIndex in leagueObjects){ 
     if (excludedSlugs.indexOf(leagueObjects[objIndex]["slug"]) > -1) { 
     /* excluded slugs - do nothing */ 

     } else { 
      var leagueId = leagueObjects[objIndex]["id"]; 
      var leagueSlug = leagueObjects[objIndex]["slug"]; 

      var data = { 
       id: leagueId, 
       slug: leagueSlug, 
       name: "lol", 
       createdAt: new Date() 
      }; 
      var query = knex('league').insert(data).toString(); 
      query += ' on duplicate key update ' + 'createdAt= ?, id = ?',[new Date(), leagueId]; 

      knex.raw(query); 


     } 
    } 


    res.json(leagueObjects); 
    } else { 
    log.error(error); 
    } 
}) 
}); 


module.exports = router; 
+1

Где Вы читаете ** knexfile **? –

+0

@Peter Pik, пожалуйста, оцените ваш дизайн проекта. также parte, где вы создаете экземпляр построителя запросов (часть var knex = // ...). Также рассмотрим примерный макет проекта, он показывает, как использовать тот же самый knexfile.js, который используется для миграции: https://github.com/sombriks/blogpost-upload-express-knex/blob/master/index.js – Sombriks

+0

добавлено больше макета сейчас. здесь я пытаюсь извлечь данные из rest api и добавить в мой postgres db, используя knex –

ответ

2

Я нашел решение. я не читал knexfile правильно, что я сделал, чтобы создать отдельный файл с db.js:

var config  = require('../knexfile.js'); 
var env   = 'development'; 
var knex  = require('knex')(config[env]); 

module.exports = knex; 

knex.migrate.latest([config]); 

тогда я использовал

var db = require('./db'); 

тогда я использовать knex как

db.knex()