Как напечатать одно поле таблицы Db, используя каркас body-parser
У меня есть простой серверный узел, который делает запрос к базе данных и печатает результаты в браузере. Когда я делаю выбор в БД, я могу взять все записи таблицы, но не отдельные поля таблицы.
Я попытался использовать структуру "body-parser", но с отрицательными результатами.
const express = require('express');
const exphbs = require('express-handlebars');
const sql = require('mssql');
const bodyParser = require('body-parser');
const config = require('./db/config.json');
const app = express();
const port = 3000;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
/*TEST CONNECTION*/
app.get('/pippo',function(req,res){
new sql.ConnectionPool(config).connect().then(pool => {
return pool.query(`select _id, titolo, contenuto, data_insert from note`)
}).then(result => {
res.render('tabella', {
//rows: result.recordset
_id: result.body._id,
titolo: result.body.titolo,
contenuto: result.body.contenuto,
data_insert: result.body.data_insert
});
}).catch(err => {
console.log('ERROR');
console.log(result.body._id);//PRINT ERROR
});
});
Это печать ошибки:
ОШИБКА (узел:9252) UnhandledPromiseRejectionWarning: ReferenceError: результат не определен в sql.ConnectionPool.connect.then.then.catch.err (C:\Users\XXX\Desktop\YYY\Udemy\Progetti\AppMyNote\app.js:36:17) at at process._tickCallback (internal/process/next_tick.js:188:7) (узел: 9252) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью.catch(). (идентификатор отклонения: 1) (узел:9252) [DEP0018] Предупреждение об устаревании: отклонение необработанного обещания устарело. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.
Если я использую это в рендере, почему у меня нет проблем?:
res.render('tabella', {
rows: result.recordset
});
}).catch(err => {
console.log('ERROR');
1 ответ
console.log(result.body._id)
- это утверждение находится внутри блока catch, а result
объект является локальным для вашего блока then, поэтому вы получаете эту ошибку.
Таким образом, чтобы получить доступ к вашему result
объект внутри блока catch, вам нужно сделать его глобальным.
Внесите следующие изменения в свой код:
const express = require('express');
const exphbs = require('express-handlebars');
const sql = require('mssql');
const bodyParser = require('body-parser');
const config = require('./db/config.json');
const app = express();
const port = 3000;
let query_result = null; //add this variable
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
/*TEST CONNECTION*/
app.get('/pippo',function(req,res){
new sql.ConnectionPool(config).connect().then(pool => {
return pool.query(`select _id, titolo, contenuto, data_insert from note`)
}).then(result => {
query_result = result;
res.render('tabella', {
//rows: result.recordset
_id: result.body._id,
titolo: result.body.titolo,
contenuto: result.body.contenuto,
data_insert: result.body.data_insert
});
}).catch(err => {
console.log('ERROR');
console.log(query_result.body._id);
});
});