大家好,对于这个愚蠢的问题感到抱歉,我正在使用javascript模块并试图组织所有内容,以便对我的jr程序员更容易使用,因为我们都是javascript新手,而不是Jquery框架编程,所以事情是:
我创建了一个模块,该模块是从名为Router的其余服务中获取数据的助手:
const BaseUrl = 'http://localhost:1128'
/**
*
* Falta Mejorar la función para los siguientes escenarios:
* 1) Que se elija la ruta desde un modulo que tenga ya prefabricadas las rutas
* 2) Para establecer un timeout
* 3) que pasa con los CData y el envio de archivos
* 4) Hay que validar los casos genericos donde se envia informacion al servidor como datos de usuario contraseña y Json Token
*/
async function request(url, params, method = 'GET') {
//los parametros que le vamos a enviar al fetch
const options = {
method,
headers: {
'Content-Type': 'application/json' // we will be sending JSON
}
};
//solo para el get enviaremos los parametros por url, si es otro lo enviaremos por el body
if (params) {
if (method === 'GET') {
//url += '?' + objectToQueryString(params);
url += '/' + params;
} else {
options.body = JSON.stringify(params); // body should match Content-Type in headers option
}
}
//esperamos a que la promesa termine para poder ejecutarlo, fetch es una promesa
let result;
try {
const response = await fetch(BaseUrl + url, options);
if (response.status !== 200) {
result = generateErrorResponse('Ocurrió un error.', response.status);
}
result = await response.json(); // convertimos el resultado en json
}
catch (e) {
result = generateErrorResponse(e.message, 500);
}
return result;
}
function generateErrorResponse(message, status) {
return {
codigo: 'error',
message,
status
};
}
function get(url, params) {
return request(url, params);
}
function create(url, params) {
return request(url, params, 'POST');
}
function update(url, params) {
return request(url, params, 'PUT');
}
function remove(url, params) {
return request(url, params, 'DELETE');
}
//Convierte el objeto en parametros para la url (solo para el caso del get)
function objectToQueryString(obj) {
return Object.keys(obj).map(key => key + '=' + obj[key]).join('&');
}
export default {
get,
create,
update,
remove
};
然后,我创建了另一个模块,该模块使用路由器从特定的url获取数据并从中获取Json格式的数据,该模块是这样的:
import RouterModule from './RouterModule.js'
import GetListOptions from './Helpers/HtmlHelpers.js'
const relativeUrl = "/personas"
export async function ObtenerSelectPersonasAsync(UsuarioId, htmlSelectObj) {
try {
const ResponseArray = await RouterModule.get(relativeUrl, UsuarioId !== 0 ? UsuarioId : null)
const ListOptions = GetListOptions(ResponseArray, 'personaId', 'nombre', '3', htmlSelectObj)
return ListOptions;
}
catch (e) {
return {
error: 'Error',
status: 404
}
}
}
export async function ObtenerPersonas(UsuarioId) {
try {
const ResponseArray = await RouterModule.get(relativeUrl, UsuarioId !== 0 ? UsuarioId : null)
return ResponseArray;
}
catch (e) {
return {
error: 'Error',
status: 404
}
}
}
export default {
ObtenerPersonas,
ObtenerSelectPersonasAsync
}
所以最终的程序员只需要使用PersonasModule来处理数据库(这在我看来,如果我做错了,请纠正我),
因此在index.html中,他们只需要这样做:
<script type="module">
import { ObtenerSelectPersonasAsync, ObtenerPersonas } from './JsModules/PersonasModule.js';
let Persona = ObtenerPersonas(1) //here it's supposed to retrieve an array however im getting a promise
Persona.then(result => {
inputNombre.value = result[0].nombre;
})
</script>
您能告诉我为什么会这样吗,我错过了什么吗?也许我正在做一些令人讨厌的事情,还有更好的方法可以做到这一点,如果您能以正确的方式指导我,我将不胜感激,非常感谢。