You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
vue-shop-admin-work/modules/Logistics.js

68 lines
4.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 导入 request 模块,该模块常用于在 Node.js 中发起 HTTP 请求,方便与其他网络服务进行交互
const request = require('request');
// 自动匹配运单号所属的物流公司
function autoComNumber(orderno) {
// 构造请求的 URL向快递100的接口发送请求尝试自动匹配运单号对应的物流公司
// 将运单号拼接到 URL 参数中resultv2=1 可能是用于指定返回结果的某种格式或版本相关参数
const url = `https://www.kuaidi100.com/autonumber/autoComNum?resultv2=1&text=${orderno}`;
// 返回一个 Promise 对象,用于处理异步操作,使得外部可以使用 async/await 语法来等待该函数执行完成
return new Promise(function (resolve, reject) {
// 使用 request 模块发起 GET 请求,传入 URL 和回调函数,回调函数接收请求过程中的错误、响应对象以及响应体内容作为参数
request(url, (err, response, body) => {
// 如果请求过程中出现错误,调用 reject 函数拒绝这个 Promise并返回包含状态码 500 和错误信息的对象
if (err) return reject({ status: 500, msg: err.message });
// 将响应体内容(通常是 JSON 字符串格式)解析为 JavaScript 对象,方便后续提取数据
body = JSON.parse(body);
// 如果解析后的 body.auto 数组长度小于等于 0意味着没有匹配到对应的物流公司同样调用 reject 函数拒绝 Promise并返回相应的错误信息对象
if (body.auto.length <= 0) return reject({ status: 501, msg: '无对应的物流公司' });
// 如果匹配到了物流公司,调用 resolve 函数成功解决这个 Promise返回包含状态码 200、物流公司信息以及对应的公司编码的对象
resolve({ status: 200, msg: body.auto[0], comCode: body.auto[0].comCode });
});
});
}
// 定义一个异步函数,用于获取物流信息,接收 Express 框架的请求req和响应res对象作为参数从函数名和使用方式推测可能在 Express 应用中使用)
async function getLogisticsInfo(req, res) {
// 调用 autoComNumber 函数传入请求参数中的运单号req.params.orderno并使用 await 等待该异步操作完成,获取匹配物流公司后的结果
const result = await autoComNumber(req.params.orderno);
// 如果返回结果的状态码不是 200说明匹配物流公司出现问题直接返回一个包含错误状态和相应错误消息的对象给客户端
if (result.status!== 200) {
return {
meta: {
status: 500,
message: '获取物流信息失败!'
}
};
}
// 根据匹配到的物流公司编码和运单号构造查询物流信息的 URL向快递100的另一个接口发送请求以获取详细物流信息
const dataUrl = `https://www.kuaidi100.com/query?type=${result.comCode}&postid=${req.params.orderno}&temp=0.2595247267684455`;
// 使用 request 模块发起请求,传入构造好的 URL 和回调函数,处理获取物流信息过程中的各种情况
request(dataUrl, (err, response, body) => {
// 如果请求过程中出现错误,使用 Express 的 res.send 方法向客户端发送包含错误状态和相应错误消息的对象,表示获取物流信息失败
if (err) {
return res.send({
meta: {
status: 501,
message: '获取物流信息失败!'
}
});
}
// 如果请求成功,解析响应体内容(假设为 JSON 格式),提取其中的物流信息数据(.data 属性具体格式取决于快递100接口返回的数据结构
// 然后使用 Express 的 res.send 方法向客户端发送包含成功状态、相应消息以及物流信息数据的对象,表示获取物流信息成功
return res.send({
meta: {
status: 200,
message: '获取物流信息成功!'
},
data: (JSON.parse(body)).data
});
});
}
// 将 getLogisticsInfo 函数作为模块的属性导出,方便其他模块引入并使用这个函数来获取物流信息
module.exports = {
getLogisticsInfo
};