Node.js 将数据从数据库(db.js)返回到节点(app.js)时出现问题
我试图通过post请求从node.js中的postgres数据库请求数据。最终,这些数据将被发送到react前端。 我正在从数据库中获取正确的数据,但似乎无法将这些数据返回到app.js(我有点像node.js noob)。我有两个文件app.js和db.js 这里是app.jsNode.js 将数据从数据库(db.js)返回到节点(app.js)时出现问题,node.js,postgresql,Node.js,Postgresql,我试图通过post请求从node.js中的postgres数据库请求数据。最终,这些数据将被发送到react前端。 我正在从数据库中获取正确的数据,但似乎无法将这些数据返回到app.js(我有点像node.js noob)。我有两个文件app.js和db.js 这里是app.js const express = require('express'); const morgan = require('morgan'); const helmet = require('helmet'); const
const express = require('express');
const morgan = require('morgan');
const helmet = require('helmet');
const cors = require('cors')
const db = require('./db')
const bodyParser = require('body-parser')
const middlewares = require('./middlewares');
const app = express();
app.use(cors());
app.use(morgan('dev'));
app.use(helmet());
// Parse URL-encoded bodies (as sent by HTML forms)
app.use(bodyParser.urlencoded({ extended: false }))
// Parse JSON bodies (as sent by API clients)
app.use(express.json());
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
next();
});
app.get('/api', (req, res) => {
res.send({ express: 'Server online' });
});
app.post('/layer', (req, res, next) => {
var layer = req.body.menu;
var geometry = db.layer(layer);
console.log(geometry);
res.set('Content-Type', 'application/json')
//const body = res.body()
});
app.use(middlewares.notFound);
app.use(middlewares.errorHandler);
module.exports = app;
这里是db,js
const { Pool, Client } = require('pg')
const connection = new Pool({
user: 'postgres',
host: 'localhost',
database: 'dbtemp',
password: 'password',
port: 5432,
max: 20,
connectionTimeoutMillis: 2000,
})
connection.connect(function(err) {
if (err) throw err;
});
connection.on('connect', () => {
console.log("connected to database on port: " );
});
module.exports = {
layer: function(layer) {
connection.query('SELECT ST_AsGeoJSON(geom) FROM nzta_centrelines', (err, result) => {
if (err) {
return console.error('Error executing query', err.stack)
}
var geometry = result.rows[0].st_asgeojson;
console.log(geometry);
return result;
})
}
}
我正在从db.js将正确的数据记录到控制台
输出:
如何将查询结果发送到app.js并发送到网页(React前端)。我猜想当数据准备好时它需要一个回调?< /p> 您可能想考虑使用一个承诺或回调
db.js
...
module.exports = {
layer: function(layer) {
return new Promise((resolve, reject) => {
connection.query('SELECT ST_AsGeoJSON(geom) FROM nzta_centrelines', (err, result) => {
if (err) {
console.error('Error executing query', err.stack)
return reject(err);
}
var geometry = result.rows[0].st_asgeojson;
console.log(geometry);
return resolve(result);
})
})
}
}
...
app.post('/layer', async (req, res, next) => {
var layer = req.body.menu;
var geometry = await db.layer(layer);
console.log(geometry);
res.set('Content-Type', 'application/json')
//const body = res.body()
});
module.exports = {
layer: function(layer, cb) {
connection.query('SELECT ST_AsGeoJSON(geom) FROM nzta_centrelines', (err, result) => {
if (err) {
console.error('Error executing query', err.stack)
return cb(err)
}
var geometry = result.rows[0].st_asgeojson;
console.log(geometry);
return cb(null, geometry);
})
}
}
...
app.post('/layer', (req, res, next) => {
var layer = req.body.menu;
db.layer(layer, (err, geometry) => {
if (err) throw err;
console.log(geometry);
res.set('Content-Type', 'application/json')
//const body = res.body()
});
});
app.js
...
module.exports = {
layer: function(layer) {
return new Promise((resolve, reject) => {
connection.query('SELECT ST_AsGeoJSON(geom) FROM nzta_centrelines', (err, result) => {
if (err) {
console.error('Error executing query', err.stack)
return reject(err);
}
var geometry = result.rows[0].st_asgeojson;
console.log(geometry);
return resolve(result);
})
})
}
}
...
app.post('/layer', async (req, res, next) => {
var layer = req.body.menu;
var geometry = await db.layer(layer);
console.log(geometry);
res.set('Content-Type', 'application/json')
//const body = res.body()
});
module.exports = {
layer: function(layer, cb) {
connection.query('SELECT ST_AsGeoJSON(geom) FROM nzta_centrelines', (err, result) => {
if (err) {
console.error('Error executing query', err.stack)
return cb(err)
}
var geometry = result.rows[0].st_asgeojson;
console.log(geometry);
return cb(null, geometry);
})
}
}
...
app.post('/layer', (req, res, next) => {
var layer = req.body.menu;
db.layer(layer, (err, geometry) => {
if (err) throw err;
console.log(geometry);
res.set('Content-Type', 'application/json')
//const body = res.body()
});
});
db.js
...
module.exports = {
layer: function(layer) {
return new Promise((resolve, reject) => {
connection.query('SELECT ST_AsGeoJSON(geom) FROM nzta_centrelines', (err, result) => {
if (err) {
console.error('Error executing query', err.stack)
return reject(err);
}
var geometry = result.rows[0].st_asgeojson;
console.log(geometry);
return resolve(result);
})
})
}
}
...
app.post('/layer', async (req, res, next) => {
var layer = req.body.menu;
var geometry = await db.layer(layer);
console.log(geometry);
res.set('Content-Type', 'application/json')
//const body = res.body()
});
module.exports = {
layer: function(layer, cb) {
connection.query('SELECT ST_AsGeoJSON(geom) FROM nzta_centrelines', (err, result) => {
if (err) {
console.error('Error executing query', err.stack)
return cb(err)
}
var geometry = result.rows[0].st_asgeojson;
console.log(geometry);
return cb(null, geometry);
})
}
}
...
app.post('/layer', (req, res, next) => {
var layer = req.body.menu;
db.layer(layer, (err, geometry) => {
if (err) throw err;
console.log(geometry);
res.set('Content-Type', 'application/json')
//const body = res.body()
});
});
app.js
...
module.exports = {
layer: function(layer) {
return new Promise((resolve, reject) => {
connection.query('SELECT ST_AsGeoJSON(geom) FROM nzta_centrelines', (err, result) => {
if (err) {
console.error('Error executing query', err.stack)
return reject(err);
}
var geometry = result.rows[0].st_asgeojson;
console.log(geometry);
return resolve(result);
})
})
}
}
...
app.post('/layer', async (req, res, next) => {
var layer = req.body.menu;
var geometry = await db.layer(layer);
console.log(geometry);
res.set('Content-Type', 'application/json')
//const body = res.body()
});
module.exports = {
layer: function(layer, cb) {
connection.query('SELECT ST_AsGeoJSON(geom) FROM nzta_centrelines', (err, result) => {
if (err) {
console.error('Error executing query', err.stack)
return cb(err)
}
var geometry = result.rows[0].st_asgeojson;
console.log(geometry);
return cb(null, geometry);
})
}
}
...
app.post('/layer', (req, res, next) => {
var layer = req.body.menu;
db.layer(layer, (err, geometry) => {
if (err) throw err;
console.log(geometry);
res.set('Content-Type', 'application/json')
//const body = res.body()
});
});
使用的
pg
库已经支持承诺,没有必要将其包装到另一个承诺层中。