如何为knex设置postgis扩展?

时间:2017-11-26 18:04:50

标签: node.js postgis knex.js

我是node的新手,正在构建一个简单的API来处理地理数据。 为此,我正在尝试实施knex-postgis

我的查询中需要一个连接文件,如下所示:

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

并使用它

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

该文档说要实现这样的扩展:

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;

编辑: 我尝试将它放在我的queries.js文件中

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

我的创建功能:

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

它是console.log一个有效的sql,它在pgadmin中工作,但在邮递员中我得到了 "message": "queries.create(...).then is not a function"

最后我的路线

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

2 个答案:

答案 0 :(得分:1)

您正在致电db.insert。你应该打电话给(\x -> x++x)

答案 1 :(得分:1)

您正在从create方法返回字符串,但期望在路由处理程序中使用promise接口。 并且您使用knex代替db进行查询构建。 试试这个

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;