我是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]);
});
});
答案 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;