2017-10-11 229 views
1

我正在使用AngularJS編寫Web應用程序,並且由於CORS問題而使用NodeJS。好吧,當我試圖讓我的節點的請求我得到這個錯誤:NodeJS。錯誤:無法驗證第一個證書

events.js:160 
     throw er; // Unhandled 'error' event 
    ^

Error: unable to verify the first certificate 
    at Error (native) 
    at TLSSocket.<anonymous> (_tls_wrap.js:1092:38) 
    at emitNone (events.js:86:13) 
    at TLSSocket.emit (events.js:185:7) 
    at TLSSocket._finishInit (_tls_wrap.js:610:8) 
    at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:440:38) 

我的文件的NodeJS(index.js):

var express = require('express') 
var cors = require('cors') 
var bodyparser = require('body-parser'); 
var querystring = require('querystring'); 
var rootCas = require('ssl-root-cas/latest').create(); 
rootCas.addFile(__dirname + '/ssl/ovccatastromehes.crt'); 
const https = require('https'); 
https.globalAgent.options.ca = rootCas; 
var request = require('request'); 

var app = express() 

app.use(bodyparser.urlencoded({extened:false})); 
app.use(bodyparser.json()); 
app.use(function (req, res, next) { 

    // Website you wish to allow to connect 
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8080'); 

    // Request methods you wish to allow 
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 

    // Request headers you wish to allow 
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type,Authorization'); 

    // Set to true if you need the website to include cookies in the requests sent 
    // to the API (e.g. in case you use sessions) 
    res.setHeader('Access-Control-Allow-Credentials', true); 

    // Pass to next layer of middleware 
    next(); 
}); 


app.get('/space/:id', cors(), function (req, res) { 
    var soapRequest = '<?xml version="1.0" encoding="utf-8"?>' 
      +'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' 
      +'<soap:Body>' 
       +'<Provincia xmlns="http://www.catastro.meh.es/"></Provincia>' 
       +'<Municipio xmlns="http://www.catastro.meh.es/"></Municipio>' 
       +'<SRS xmlns="http://www.catastro.meh.es/">EPSG:4326</SRS>' 
       +'<RefCat xmlns="http://www.catastro.meh.es/">'+req.params.id+'</RefCat>' 
      +'</soap:Body></soap:Envelope>'; 

    var options = { 
     host: 'ovc.catastro.meh.es', 
     path: '/ovcservweb/ovcswlocalizacionrc/ovccoordenadas.asmx', 
     method: 'POST', 
     headers : { 
      "SOAPAction" : "http://tempuri.org/OVCServWeb/OVCCoordenadas/Consulta_CPMRC", 
      "Content-Type": "text/xml; charset=utf-8", 
      "Content-Length": Buffer.byteLength(soapRequest)} 
    }; 

    var httpreq = https.request(options, function (response) { 
     response.setEncoding('utf8'); 
     response.on('data', function (chunk) { 
      console.log("body: " + chunk); 
      res.send(chunk); 
     }); 
     response.on('end', function() { 
      //res.send('ok'); 
     }); 
    }); 

    httpreq.write(soapRequest); 
    httpreq.end(); 
}); 

app.listen(8100, function() { 
    console.log('CORS-enabled web server listening on port 8100') 
}); 

,我稱之爲節點的服務:

.factory("catastro", function($http, $sce) { 
    /* 
    * INICIALIZACIÓN DE VARIABLES 
    */ 
    var url = 'http://localhost:8100/space/'; 
    var cat = {}; 

    /* 
    * FUNCIONES 
    */ 
    // Obtener XML por referencia catastral 
    cat.leerReferenciaCatastral = function(rc) { 
     var urladd = url + rc; 
     return $http.get(urladd) 
     .then(function(respuesta) { 
      return respuesta.data; 
     }); 
    }; 

    return cat; 
}) 

這是我第一次與NodeJS,我有點迷路。我搜索了'https'並請求IS是一項功能...任何建議?

回答

1

那是因爲你想調用的函數requestrootCas對象:

const https = require('https').globalAgent.options.ca = rootCas; 

換句話說,在這裏你指定rootCasrequire('https').globalAgent.options.cahttps


相反,試試這個:

const https = require('https'); 
https.globalAgent.options.ca = rootCas; 
相關問題