Как напечатать одно поле таблицы 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); 
    }); 
});
Другие вопросы по тегам