javascript - TypeError: Spread-syntax kräver att ...iterable[Symbol.iterator] är en funktion
Jag har detta fel när jag försöker använda uppdateringskomponenten med min app, och jag vet inte varför det är ett fel
Fel :
TypeError: Spread syntax requires ...iterable[Symbol.iterator] to be a function
at HttpHeaders.applyUpdate (http.mjs:244:22)
at http.mjs:211:56
at Array.forEach (<anonymous>)
at HttpHeaders.init (http.mjs:211:33)
at HttpHeaders.forEach (http.mjs:274:14)
at Observable._subscribe (http.mjs:1811:25)
at Observable._trySubscribe (Observable.js:37:25)
at Observable.js:31:30
at errorContext (errorContext.js:19:9)
at Observable.subscribe (Observable.js:22:21)
Och detta är koden för min app, jag använder Laravel 9 i back-end, men problemet uppstår för mig som om det vore från front-end, bara för säkerhets skull lämnar jag koden från back-end i slutet
**UpdateComponent.ts: **
onSubmit(form:any){
this._userService.update(this.token, this.user).subscribe(
response => {
console.log(response)
},
error => {
this.status = 'error'
console.log(error)
}
)
}
ModelUser.ts:
export class User{
constructor(
public id: number,
public name: string,
public surname: string,
public role: string,
public email: string,
public password: string,
public description: string,
public image: string
){}
}
UserService.ts
update(token:any, user:any):Observable<any>{
let json = JSON.stringify(user)
let params = 'json=' + json
let headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded').set('Authorization', token)
return this._http.put(this.url + 'user/update', params, { headers: headers })
}
UserController/uppdatera.php
public function update(Request $request){
//Recoger los datos por POST
$json = $request->input('json', null);
$params_array = json_decode($json, true);
if($checkToken && !empty($params_array)){
//Sacar usuario identificado
$user = $jwtAuth->checkToken($token, true);
//Validar los datos
$validate = \Validator::make($params_array, [
'name' => 'required|alpha',
'surname' => 'required|alpha',
'email' => 'required|email|unique:users,'.$user->sub
]);
//Quitar los campos que no se actualizan
unset($params_array['id']);
unset($params_array['role']);
unset($params_array['password']);
unset($params_array['created_at']);
unset($params_array['remember_token']);
//Actualizar el usuario en la DB
$user_update = User::where('id', $user->sub)->update($params_array);
//Devolver array con resultado
$data = array(
'code' => 200,
'status' => 'success',
'user' => $user,
'changes' => $params_array
);
}else{
$data = array(
'code' => 400,
'status' => 'error',
'message' => 'Usuario no identificado'
);
}
return response()->json($data, $data['code']);
}
Svar #1
Jag tror att ditt problem finns i UserService.ts när du sätter headers, jag hade ett liknande problem och det berodde på att värdet på headern inte var en sträng, så i ditt fall behöver du se till att typen av token är sträng. Du kan göra det genom att göra .set('Authorization', String(token)) eller .set('Authorization', '' + token).