的NodeJS。 错误:无法validation第一个证书

我正在用AngularJS编写一个Web应用程序,而且由于CORS问题,我使用了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 (eg 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,而且我有点迷路。 我search了“https”,并要求是一个function…任何build议?

这是因为你试图调用rootCas对象上的函数request

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

换句话说,在这里您将rootCas分配给require('https').globalAgent.options.cahttps


相反,试试这个:

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