我有一些代码在vue.js中发送https请求,当使用vuex中的Actions方法发送https请求时,我在控制台中得到了这样的错误信息
获取 https:/localhostapigetpeople。 net::ERR_SSL_SERVER_CERT_BAD_FORMAT
我的代码是。
import Axios from "axios";
let state = {
people: []
};
let getters = {
getPeople(state) {
return state.people;
}
}
let mutations = {
setPeople(state, people) {
state.people = people
}
}
let actions = {
sendHttpReq({ commit }) {
Axios.get('https://localhost:443/api/getpeople').then(response=>response.data).then(result=>{
commit('setPeople',result);
}).catch(error=>{
console.log(error.response)
})
}
}
export default {
state,
getters,
mutations,
actions
}
let express=require('express');
let cors=require('cors');
let https=require('https');
let pem=require('pem');
let mydb=require('./mydb')
pem.createCertificate({days:1,selfSigned: true},(err,keys)=> {
if (err)
return err;
let app = express();
app.use(express.json());
app.use(cors());
app.post('/api/setPeople', (req, res) => {
let body = req.body;
mydb.insert(body.firstName, body.lastName, body.phone, (result) => {
res.status(200).send(result)
});
});
app.get('/api/getpeople', async (req, res) => {
mydb.getPoeple((result) => {
console.log(result);
res.status(200).send(result)
});
});
https.createServer({key: keys.serviceKey, cert: keys.certificate}, app).listen(443, () => {
console.log('server is run ' + 443);
});
})
这段代码是发送https请求并得到响应,然后设置到人和其他代码显示人到表格中。
-----BEGIN CERTIFICATE-----
MIICpDCCAYwCCQD1yVw3YCtIUDANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAls
b2NhbGhvc3QwHhcNMTkxMDA2MTgxNzE3WhcNMTkxMDA3MTgxNzE3WjAUMRIwEAYD
VQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDc
e+2PKex1g7qkKljtWD9JgP7MBgL/YTsmMj3TGtn1cmV0415jb8tSJZi8x8zJwudY
pDAjxk4bCRud0maV4Ag3LNSC8R+GrVpMd5oPzFI9crATf5OHzyJWhb3qYAutkw3s
GB78q9VoFZygwV7LF2nAU61z6VS/mwECohEoJUvUSvcMmt4Qa3IBrFxpJhf5K6B8
kLRYzhM/FpRxBGql9vuSYZWIpgWTpOIdUNwUtDejNE35CzrV8fhKzQWVEPQUSX3D
7wJVIa5YBtJnxmPAIthiDTR6Z/N8VTccWJgWXxJsJ8qxIl1jn3xkOvaGRo2PyeVW
+baSzEu6jYYkcSWj6DWJAgMBAAEwDQYJKoZIhvcNAQELBQADggEBABe9xrSwiJqW
TUpgjc2mhXjsFlAZ9E1tkd3X+rayqfT236fsqtI0oifbCHtcSVGAxS9mu8rrSjLr
uLOA8Guiod+pLvyizf1vZHYX6PAFiUOrOSj6i1IPN911yhMTrD1c9F1nHGuaklSv
De+A5Vqu0VZdoZx2mtfZthILerqBr/iSMweeTdrTOedbLz9+AbtrEpowEUedytH0
kOpljE0ndoPoqY7Q/CbZq8GlI6Zg504wDuYhUcFAnPgAoY+MWhP/+wquCbnlQfVD
/DlWQh51Y+rpUghrf3GNenF58StvD7XpYIwCItpw2F3eWluB8QfDoRJ9rVTtEevA
S+44fP5pe4U=
-----END CERTIFICATE-----
以问题中所示的证书PEM为例,可以做以下操作 openssl x509 -text
并看到。
Certificate:
Data:
Version: 1 (0x0)
...
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=localhost
...
Subject: CN=localhost
因此,这是一张X509v1证书,是为localhost签发的。至少在Chrome浏览器中,它没有任何Subject Alternative Names扩展。只有X509v3证书才能有这样的扩展,而且需要特别配置。该 证件 包含了如何使用必要的扩展来创建证书的例子。
axios
执行 GET
请求,你应该在url中发送数据
axios.get('/user?ID=12345')
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.finally(function () {
// always executed
})
并进行 POST
请求
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
现在,在你的代码中,你发送POST请求,并有对象发送,你应该用
Axios.post('https://localhost:443/api/getpeople',{ withCredentials:
true}).then(response=>response.data).then(result=>{
commit('setPeople',result);
}).catch(error=>{
console.log(error.response)
用于GET请求
Axios.get('https://localhost:443/api/getpeople').then(response=>response.data).then(result=>{
commit('setPeople',result);
}).catch(error=>{
console.log(error.response)