删除请求无效

时间:2018-06-17 18:09:54

标签: javascript node.js angular typescript

我正在尝试在我的项目中添加“删除请求”但不起作用...

给我留言:

  

“”ERROR HttpErrorResponse {headers:HttpHeaders,status:200,statusText:“OK”,url:“here”,ok:false,...}“”

我在service.ts上的方法是:

  delete(productId: number): void {
  this.products = this.products.filter(Product => Product.id !== productId);

  this.produtoService.deleteProduct(productId).subscribe();
}

我的component.ts:

app.delete('/produtos', function (req, res) {
    console.log(req.body);
    mc.query('DELETE FROM `produtos` WHERE `id`=?', [req.body.id], function 
(error, results, fields) {
    if (error) throw error;
    res.end('Record has been deleted!');
  });
 });

我在node.js上的方法:

<tbody>
   <tr *ngFor="let product of products">
      <th scope="row">{{product.id}}</th>
      <td>{{product.nome}}</td>
      <td>{{product.price}}</td>
      <td>{{product.url}}</td>
      <td> <button class="btn-primary delete" title="delete product"
        (click)="delete(product.id)">
        Delete
      </button></td>
    </tr>
  </tbody>

当然还有html按钮:

def upload_zip(request):
    if request.method == 'POST' and request.FILES['myfile']:
        my_file = request.FILES['myfile']
        fs = FileSystemStorage()

        settings.MEDIA_ROOT = 'fama/static/resources/' + request.user.username
        filename = fs.save(my_file.name, my_file)
        uploaded_file_url = fs.url(filename)

        str = my_file.name
        var = str.replace(".zip", "")
        z = zipfile.ZipFile(my_file)

        zip = zipfile.ZipFile(my_file)
        zip.extractall('fama/static/resources/' + request.user.username + '/')
        dataset_array = os.listdir('fama/static/resources/'
                                   + request.user.username + '/' + var)

        os.remove('fama/static/resources/' + request.user.username + '/'
                  + var + '.zip')

        return filename

如果你能帮助我,我很高兴。

@Edit:github =

上的项目

http://localhost:8080/produtos

https://github.com/Mauricio-vieira/Front-End-Project

2 个答案:

答案 0 :(得分:0)

在您的Angular代码中,您正在尝试解析响应:

map((response: Response) => response.json())

如果响应为空,这将失败,因为它不是有效的JSON。删除此行,或更改后端以返回一些有效的JSON

如果您正在使用HttpClient,默认情况下会尝试将其解析为JSON,因此删除该行不会修复它。除了删除该行之外,您还需要在httpOptions中将responseType设置为text

const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
  responseType: 'text' as 'text'
}

(请注意,我们必须根据this issue明确键入responseType。另请注意,无需更改Content-Type标头,因为您仍然在发送JSON,只是没有获取JSON回来。)

答案 1 :(得分:0)

对于删除请求,您需要在标头中允许删除请求。 使用res.header(&#34; Access-Control-Allow-Methods&#34;,&#34; GET,PUT,POST,DELETE&#34;);

或添加此中间件

app.use((req,res,next)=>
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE");
    next()
}

如果未设置此标头,则删除请求将无法在节点上运行。 您也可以对所需的URL发布请求,如果没有,则提供删除功能。但设置标题工作正常。