Вложенная выборка на стороне сервера не работает при вызове клиентаJavascript

Форум по Javascript
Ответить
Anonymous
 Вложенная выборка на стороне сервера не работает при вызове клиента

Сообщение Anonymous »

У меня есть два файла действий Next.js на стороне сервера, action.ts и DropDownServices.ts, которые выполняют выборку Axios.
Основные действия.ts определяют общий вызов Axios как настраиваемый метод следующим образом, где заголовок включает в себя токен доступа, хранящийся в файлах cookie.
'use server'
...
export async function get(
url: string,
params?: Service.IParams
): Promise {
let result = request(HttpMethod.GET, url, {
params,
headers: setupHeaders(await getDecryptedToken() /* Token stored in cookie, so it uses await cookies() etc. */)
});
return result;
}

Файл DropDownServices.ts представляет собой его оболочку, которая определяет общие операции с URL-адресами и вызывает пользовательский метод get() вложенным способом.
'use server'
...
let urlKeyValueMap = new Map();
urlKeyValueMap.set("query1", "/lookup/query1");
urlKeyValueMap.set("query2", "/lookup/query2"); //etc.

export async function getDropDownList(urlKey: string): Promise{
let url = urlKeyValueMap.get(urlKey);
if(url) {
let result = await get(url); // This is the custom get() in actions.ts
return result;
} else {
let emptyArray:any = [];
return emptyArray;
}
}

Из клиентского компонента в Next.js 16 я вижу следующее:
  • Если этот клиентский компонент вызывает getDropDownList , в первый раз он работает, но впоследствии не работает (ответ не получен и конечная точка не достигнута).
  • Если этот клиентский компонент вызывает get напрямую, он работает всегда.
Почему такая разница, если оба являются серверными компонентами?
'use client'
...
useEffect(() => {
fetchData();
}, []);

const fetchData = async () => {
// THIS ALWAYS WORKS
//const dropdownList = await get('/lookup/query1');
// THIS NESTED SERVER CALL DOESN'T WORK ON 2nd TRY
const dropdownList = await getDropDownList('query1');
}


Подробнее здесь: https://stackoverflow.com/questions/798 ... lient-call
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»