#node.js #react-native
#node.js #react-native
Вопрос:
У меня есть react native 0.59
приложение, которое подключается к серверу nodejs. Приложение инициирует fetch
запрос на извлечение текущего пользовательского объекта с внутреннего сервера. Вот код для обработки запроса на выборку на сервере:
router.get('/myself', [auth_deviceid, auth_userinfo], async (req, res) => {
console.log("myself req.user :", req.user);
return res.status(200).send(req.user);
});
Вот консоль.вывод журнала выше. Возвращается пользовательский объект, как показано ниже:
user {
dataValues:
{ id: 1,
name: 'test uer1',
email: null,
cell: '123456789',
cell_country_code: '1',
comp_name: null,
status: 'active',
role: 'admin',
device_id: '02f7e7aa907a2a2b',
user_data: { user_secret: '' },
last_updated_by_id: null,
fort_token: '12345678901234567890',
createdAt: 2019-04-06T07:00:00.000Z,
updatedAt: 2019-04-06T07:00:00.000Z },
_previousDataValues:
{ id: 1,
name: 'test uer1',
email: null,
cell: '123456789',
cell_country_code: '1',
comp_name: null,
status: 'active',
role: 'admin',
device_id: '02f7e7aa907a2a2b',
user_data: { user_secret: '' },
last_updated_by_id: null,
fort_token: '12345678901234567890',
createdAt: 2019-04-06T07:00:00.000Z,
updatedAt: 2019-04-06T07:00:00.000Z },
_changed: {},
_modelOptions:
{ timestamps: true,
validate: { custom_validate: [AsyncFunction: custom_validate] },
freezeTableName: false,
underscored: false,
underscoredAll: false,
paranoid: false,
rejectOnEmpty: false,
whereCollection: { id: '1' },
schema: null,
schemaDelimiter: '',
defaultScope: {},
scopes: [],
indexes: [],
name: { plural: 'users', singular: 'user' },
omitNull: false,
sequelize:
Sequelize {
options: [Object],
config: [Object],
dialect: [PostgresDialect],
queryInterface: [QueryInterface],
models: [Object],
modelManager: [ModelManager],
connectionManager: [ConnectionManager],
importCache: {},
test: [Object] },
hooks: {},
uniqueKeys: {} },
_options:
{ isNewRecord: false,
_schema: null,
_schemaDelimiter: '',
raw: true,
attributes:
[ 'id',
'name',
'email',
'cell',
'cell_country_code',
'comp_name',
'status',
'role',
'device_id',
'user_data',
'last_updated_by_id',
'fort_token',
'createdAt',
'updatedAt' ] },
__eagerlyLoadedAssociations: [],
isNewRecord: false }
Однако на стороне приложения получен совершенно другой пользовательский объект. Вот вывод консоли:
'User returned in getuser as: %o', { type: 'default',
04-08 21:21:26.487 12710 12766 I ReactNativeJS: status: 200,
04-08 21:21:26.487 12710 12766 I ReactNativeJS: ok: true,
04-08 21:21:26.487 12710 12766 I ReactNativeJS: statusText: undefined,
04-08 21:21:26.487 12710 12766 I ReactNativeJS: headers:
04-08 21:21:26.487 12710 12766 I ReactNativeJS: { map:
04-08 21:21:26.487 12710 12766 I ReactNativeJS: { date: 'Tue, 09 Apr 2019 04:21:26 GMT',
04-08 21:21:26.487 12710 12766 I ReactNativeJS: etag: 'W/"14f-/XZLqbaIchn159DwAYBdoQySOWg"',
04-08 21:21:26.487 12710 12766 I ReactNativeJS: 'x-powered-by': 'Express',
04-08 21:21:26.487 12710 12766 I ReactNativeJS: connection: 'keep-alive',
04-08 21:21:26.487 12710 12766 I ReactNativeJS: 'content-length': '335',
04-08 21:21:26.487 12710 12766 I ReactNativeJS: 'content-type': 'application/json; charset=utf-8' } },
04-08 21:21:26.487 12710 12766 I ReactNativeJS: url: 'http://192.168.2.133:3000/api/users/myself?_device_id=02f7e7aa907a2a2b',
04-08 21:21:26.487 12710 12766 I ReactNativeJS: _bodyInit:
04-08 21:21:26.487 12710 12766 I ReactNativeJS: { _data:
04-08 21:21:26.487 12710 12766 I ReactNativeJS: { size: 335,
04-08 21:21:26.487 12710 12766 I ReactNativeJS: offset: 0,
04-08 21:21:26.487 12710 12766 I ReactNativeJS: blobId: '34fa1356-5846-4577-b4fa-77c99248246c' } },
04-08 21:21:26.487 12710 12766 I ReactNativeJS: _bodyBlob:
04-08 21:21:26.487 12710 12766 I ReactNativeJS: { _data:
04-08 21:21:26.487 12710 12766 I ReactNativeJS: { size: 335,
04-08 21:21:26.487 12710 12766 I ReactNativeJS: offset: 0,
04-08 21:21:26.487 12710 12766 I ReactNativeJS: blobId: '34fa1356-5846-4577-b4fa-77c99248246c' } } }
_getUser()
Это называется асинхронным в componentDidMount
. Вот код:
module.exports._getUser = async () => {
try {
let url = `http://192.168.2.133:3000/api/users/myself?_device_id=${encodeURIComponent(DeviceInfo.getUniqueID())}`;
console.log("getuser url : %s", url);
let res = await fetch(url, {
method: "GET",
headers: {
"x-auth-token": "mytoken",
}
});
console.log("User returned in getuser as: %o", res);
return res;
}
catch (e) {
console.log("Error in get myself : ", e);
return "";
};
};
Почему пользовательский объект не принимается на стороне приложения?
Комментарии:
1. попробуйте с
let responseJson = await res.json();
Ответ №1:
ваш res может быть доступен по адресу res.data
или res.data.data
.
Если нет, попробуйте JSON.stringify(res)
, когда вы регистрируете его, вы увидите, где хранится ваша фактическая информация.
Ответы API всегда состоят из статуса, заголовков, данных и т.д…