Angular 2 put方法不适用于节点js

时间:2017-03-17 08:50:37

标签: node.js angular

实际上我需要使用节点js更新方法更新到数据库,但我已经尝试了很多方法,但由于它不起作用。

这就是我所尝试过的..

Angular 2

 private getHeaders(){
        let headers = new Headers();
        headers.append('Accept', 'application/json');
        return headers;
    }

 updateMethod(params : any,url : string){           
    //var content = new URLSearchParams();
    // let searchParams = new URLSearchParams();
        params.url = url;
        /*  for (let param in params) {
               searchParams.set(param, params[param]);
        }*/          
        /*let apiHeaders = new Headers({  'Accept' : 'application/json','Content-Type': 'application/json',"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS" });
          apiHeaders.append('Method', 'PUT');                           
          apiHeaders.append('Content-Type', 'application/json;charset=UTF-8');
          apiHeaders.append('Access-Control-Allow-Credentials',"true");*/
          //console.log(searchParams);          
          return this.http
             .put(this.baseUrl+"api/update", JSON.stringify(params), {headers: this.getHeaders()})
             .map(res => res.json());
    }   

的NodeJS

//Update Method
router.put('/api/update', function(req, res) {
    res.setHeader('Access-Control-Allow-Origin', '*');  

    var params = {};        
    for(var keyName in req.body){
        if(keyName != "url"){
            params[keyName] = req.body[keyName];    
        }
    }   
    console.log(params);

    //Update Api Call
    request.put(
        baseUrl + req.body.url,
        { json: params },
        function (error, response, body) {
            if (!error && response.statusCode == 200) {
                res.send(body);
            }else{  
                if(error == null){
                    res.send(false);    
                }else{
                    res.send(error);
                }
            }
        }
     );

}); 

我每次都会收到此错误:

  

XMLHttpRequest无法加载http://localhost:8081/api/update。方法   预检中的Access-Control-Allow-Methods不允许PUT   响应。

请给出任何解决方案..

1 个答案:

答案 0 :(得分:1)

如果你使用express,我更喜欢包含这个lib,以启用CORS

const cors = require('cors');

const app = express();
app.use(cors());

请注意:在声明路由器之前或在路由器文件中放置app.use(cors());

const cors = require('cors');


router.put('/api/update', cors(), function(req, res) {});

包裹信息:https://www.npmjs.com/package/cors