В моем веб-приложении Node.JS у меня есть модуль уровня базы данных (db_location.js
). В зависимости от типа ответа от вызова "выбор узла" он возвращает обещание json() или text() в зависимости от типа контента от ответа на вызов извлечения.
const querystring = require('querystring');
const fetch = require('node-fetch');
const p_conf = require('../parse_config');
const db_location = {
getLocations: function() {
return fetch('${p_conf.SERVER_URL}/parse' + '/classes/GCUR_LOCATION', { method: 'GET', headers: {
'X-Parse-Application-Id': 'APPLICATION_ID',
'X-Parse-REST-API-Key': 'restAPIKey'
}}).then(function(res1) {
const contentType = res1.headers.get('content-type').toLowerCase();
if (contentType.includes("application/json"))
return res1.json(); // RETURNS A PROMISE
else
return res1.text(); // RETURNS A PROMISE
}).catch(err => Promise.reject(JSON.stringify({ "Error": err })));
}
};
module.exports = db_location
Модуль вызывается экспресс-маршрутом locations.js
.
const db_location = require('../db/db_location');
router.get('/', function(req, res, next) {
db_location.getLocations()
.then(function(result) {
/*
IF RESULT IS JSON, DO PROCESSING 1;
ELSE RESULT IS TEXT, DO PROCESSING 2.
*/
})
.catch((err) => {
return next(err);
})
});
Поскольку ответ из выборки не может быть передан по цепочке обещаний, нет способа извлечь тип контента из кода маршрута.
Ну Javascript строки являются действительными данными Json. Поэтому теоретически вы не можете сказать, было ли что-то Json или нет, если вы не res1.json()
его после res1.json()
Вы можете проверить, есть ли что-то типа string со следующим в location.js
if(typeof result === 'string'){ /* it a string*/ }
else{ /* it something else */}
.then(function(result) {
проверить, является лиresult
объектом или строкой - простоreturn res1.json(); // RETURNS A PROMISE THAT RESOLVES TO AN OBJECT
return res1.text(); // RETURNS A PROMISE THAT RESOLVES TO A STRING
return res1.json(); // RETURNS A PROMISE THAT RESOLVES TO AN OBJECT
иreturn res1.text(); // RETURNS A PROMISE THAT RESOLVES TO A STRING