代码之家  ›  专栏  ›  技术社区  ›  Sumchans

Angular Nodejs MySQL CORS问题

  •  -1
  • Sumchans  · 技术社区  · 6 年前

    这就是我在nodejs上启用CORS的方式。但是前端的更新记录请求似乎没有起作用。但是get、post、delete命令有效。

    app.use((req, res, next) => {//Middleware for CORS. Code to allow requests from any url
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", 'GET, POST, OPTIONS, PUT, DELETE');
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept ");
    next();
    

    })

    这是我在nodejs上执行update语句的方式

    backend.put('/updateworkorder/:id', (req, res) => {
        console.log(req.body);
        let sql = "UPDATE workorders SET ? WHERE ?"
        db.query(sql, [{accountNumber: req.body.accountNumber,
            customerName: req.body.customerName,
            packageName: req.body.packageName,
            addons: req.body.addons,
            campaignName: req.body.campaignName,
            notes: req.body.notes,
            entryDate: new Date(req.body.entryDate),
            crew: req.body.crew,
            postDate: new Date(req.body.postDate),
            status: req.body.status
        }, 
            {id: req.body.id}], (err, result) => {
            if (err) throw err;
            // console.log(result);
            res.send(result);
        });
    });
    

    这是有角度的呼叫部分

     updateWorkOrder(workOrder) {
        // console.log(workOrder.id);
        let headers = new HttpHeaders();
         headers.append('Content-Type' , 'application/json');
        return this.http.put(this.BASE_URL + '/updateworkorder/' + workOrder.id, {headers: headers});
      }
    

    这是Chromes控制台上的错误 enter image description here

    2 回复  |  直到 6 年前
        1
  •  2
  •   Sabik    6 年前

    根据方法映射,URL应该包含映射模板要识别的ID。服务器无法识别URL模板并返回404。 要生成有效的URL并将数据传递给请求,您应该将UI上的方法更改为

    this.http.put<IWorkOrders>(this.BASE_URL + '/updateworkorder/' + workOrder.id, workOrder);
    
        2
  •  0
  •   officert    6 年前

    你输入的URL中缺少ID,这就是为什么你会得到404未找到错误的原因。在日志中,您可以看到您调用的URL是“/backend/updateworkorder/”,而它应该是“/backend/updateworkorder/your id”。

    将您的呼叫更新到:

    this.http.put<IWorkOrders>(this.BASE_URL + '/updateworkorder/' + workOrder.id);