2016-03-25 19 views
0

İyonik bir uygulama oluşturdum ve ön uç çalışmasına sahip oldum. Şimdi PostgreSQL db bağlantım için Node ve Sequelize kullanarak arka tarafa odaklanıyorum.Bağlantısını açmak için bağlantı

Bağlantıyı bin/www olarak oluşturdum ve modellerimde/user.js dosyasımda (kullanıcı modeli oluşturmak için) ve yol dosyalarından (index.js) birinde oluşturmaya çalışıyorum. yeni bir kullanıcı ve db'ye ekleyin.

Daha önce Sequelize kullanmamıştım, bu yüzden kuruluş akışına sahip olup olmadığından emin değilim. Ben başka bir dosyadan bağlantı geçmesine module.exports kullanmaya çalışıyorum, ama aslında

"GET /api/home 500 7.717 ms - 2567 TypeError: Cannot read property 'sync' of undefined 
     at /Users/me/app/server/routes/api/index.js:13:12" 

Bunu yapmak için daha iyi bir yolu var mı 'tanımsız' Yoldan geçen ki?

Bu bin/www dosyasıdır:

var pg = require('pg'); 
var Sequelize = require("sequelize"); 

//DB CONNECTION 
var sequelize = new Sequelize('dbname', 'postgres', 'password', { 
    host: 'localhost', 
    port: '5434', 
    dialect: 'postgres', 
    pool: { 
    max: 5, 
    min: 0, 
    idle: 10000 
    }, 
}); 

sequelize.authenticate().then(function(err) { 
    if (err) console.log('Unable to connect to the PostgreSQL database:', err); 
    console.log('Connection has been established successfully.'); 
}); 

module.exports.sequelize = sequelize; 

Bu benim modeller/user.js geçerli:

var Sequelize = require("sequelize"); 
var sequelize = require("../bin/www").sequelize; 

module.exports = function(sequelize, DataTypes) { 
    var User = sequelize.define('user', { 
    fb_access_token: { 
     type: Sequelize.STRING 
    }, 
    fb_id: { 
     type: Sequelize.STRING 
    }, 
    book_wishlist: { 
     type: Sequelize.ARRAY 
    } 
    }, { 
    freezeTableName: true 
    }); 
    return User; 
} 

Ve bu index.js rota:

var Sequelize = require("sequelize"); 
var express = require('express'); 
var router = express.Router(); 
var sequelize = require("../../../bin/www").sequelize; 
var User = require('../../../models/user'); 

router.get('/home', function(req, res, next) { 
    console.log('in router.get to home'); 
    console.log('User:',User); 

    sequelize.sync({ force: true }).success(function(err) { 
    //insert new user 
    User.create({ 
     fb_access_token: "yes", 
     fb_id: "no", 
     book_wishlist: ["yes", "no"] 
    }).success(function(user) { 
     //you can now access the newly created user via the variable user 
     console.log(user); 
     res.send(user); 
    }); 
    }); 
}); 
+0

Dizin.js'de '' 'var sequelize = required (" ../../../ bin/www "); console.log (sequelize) '' Ve çıkış –

+0

ahh evet yapıştırın - Boş bir nesne döndürür: {} – mdegges

+0

Tamam, bu yüzden her şeyi doğru bir kod perspektifinden yapıyorsunuz, ancak zor bir hata var. Neredeyse farklı bir dosya yüklüyor gibi görünüyor. Bin/www' nedir? Bu bir dizin mi? Yoksa kelimenin tam anlamıyla 'www.js'? –

cevap

0

Nihayet Sean's answer in this Stackoverflow question sayesinde bunu çözdüm - veritabanı bağlantım için bin içinde yeni bir dosya oluşturdum lerine (db.js) ve module.exports = sequelize; yapıyor ihraç sequelize Sonra benim daha önceki bir yaklaşım bin/www ihracat Işık'ın yaptığı niçin hala emin değilim boş nesne döndürdü var sequelize = require('../../../bin/db');

yaparken bunu gerektirir başardı diğer dosyalarımda istediğimde. Ben nodemon başlattığınızda bin/www denir gibi, uyumsuz davranış ile ilgili bir şey olduğunu düşünüyorum.

Herhangi bir fikriniz varsa yorum yapmaktan çekinmeyin.

İlgili konular