2017-11-26 15 views
0

저는 노드를 처음 사용하고 지리 데이터를 처리 할 수있는 간단한 API를 구축하고 있습니다.knex에 postgis extention을 설정하는 방법은 무엇입니까?

const knex = require('./knex'); 

과에 말은

update(id, poi) { 
    return knex('poi').where('id', id).update(poi, '*'); 

기타 문서를 사용이를 위해 나는 내가 지금처럼 내 queries.js에서 필요로 연결 파일이 knex-postgis

을 구현하기 위해 노력하고 다음과 같이 확장 프로그램을 구현하십시오.

const knex = require('knex'); 
const knexPostgis = require('knex-postgis'); 

const db = knex({ 
    dialect: 'postgres' 
}); 

// install postgis functions in knex.postgis; 
const st = knexPostgis(db); 
/* or: 
* knexPostgis(db); 
* const st = db.postgis; 
*/ 

누군가가 가능합니까? 내 구조에서 코드를 구현하는 위치를 설명하십시오. 확장 기능을 처음 사용하는 경우입니다. 내 knex.js 파일에 넣습니까?

내 knex.js는 다음과 같다 :

const environment = process.env.NODE_ENV || 'development'; 
const config = require('../knexfile'); 
const environmentConfig = config[environment]; 
const knex = require('knex'); 
const connection = knex(environmentConfig); 
module.exports = connection; 

편집 :

create() { 
    const sql = knex.insert({ 
     geom: st.geomFromText('Point(-71.064544 44.28787)', 4326) 
    }).into('poi').toString(); 
    console.log(sql); 
    return sql 

: 내 queries.js이 퍼팅 시도가

const knex = require('./knex'); 
const knexPostgis = require('knex-postgis'); 
const st = knexPostgis(knex); 
const db = knex({ 
    dialect: 'postgres' 
}); 

기능을 만들 내 파일 그것은 console.log pgadmin에서 작동하지만 postman에서 작동하는 유효한 sql은을 얻습니다."message": "queries.create(...).then is not a function",

그리고 당신은 knex.insert를 호출하고

router.post('/', (req, res, next) => { 
    queries.create(req.body).then(poi => { 
     res.json(poi[0]); 
    }); 
}); 

답변

1

create 메서드에서 문자열을 반환하지만 경로 처리기에 약속 인터페이스가 있어야합니다. 그리고 쿼리 작성에 db 대신 knex을 사용하고 있습니다. 시험해보십시오.

const builder = db.insert(/*same as above*/).into('tablename'); 
const sql = builder.toString(); 
console.log(sql); 
// Return builder instance itself (promise) instead of string 
return builder; 
+0

답을 주셔서 감사합니다. 배울 점이 많습니다.) 약속을 사용하면서 녹색. 코드를 다시 작성할 수있게되면 (코딩을위한 새 컴퓨터를 설정하는 즉시)이 작업을 시도 할 것입니다. 정말 고마워. – geogrow

+0

마침내 제안을 약간 수정하여 작동하게되었습니다. (.into ('table') 추가. 빌더 .e const sql = db.insert ({ geom : st.geomFromText ('Point (-71.064544 44.28787)', 4326) }). into ('poi'); console.log (sql.toString()); return sql – geogrow

+0

경로 처리기가 약속 인터페이스를 기대한다고 말하면 경로가 개체뿐만 아니라 문자열을 기다리고 있다는 것을 의미합니까? 내가 그걸 제대로 이해 했니? – geogrow

1

결국 내 경로. db.insert으로 전화해야합니다.

+0

답장을 보내 주셔서 감사합니다. 불행히도 작동하지 않았습니다. 내 경로를 추가하면 자세한 내용을 볼 수 있습니다. 당신이 알고있는 const db = knex ({ 방언 : 'postgres' }); 그렇지? knex에 연결하기 전에 방언을 설정하지 않았습니까? – geogrow

+0

PostgreSQL을 사용하여보다 최적화되고 스키마를 인식하며 문맥에 맞는 코드를 생성하는 후크를 추가합니다. https://github.com/tgriesser/knex/tree/9122cbf6dfde7f347a4512ba63d32265becf7bb2/src/dialects/postgres –

+0

코드는 절대 작동하지 않으므로 내 것이 당신이 원하는대로 행동하는지, 내 것이 무엇인지를 원하는지. 절대적으로 라이브러리를 초기화해야합니다. http://knexjs.org/#Installation-client –