2024-08-07



// 引入Leaflet库和天地图插件
import L from 'leaflet';
import 'leaflet-tilelayer-tm';
 
// 初始化地图并设置中心点和缩放级别
const map = L.map('map').setView([39.9788, 116.30226], 10);
 
// 创建天地图图层并添加到地图上
L.tileLayer.tm().addTo(map);
 
// 添加地图控件和标记
L.control.scale().addTo(map);
L.marker([39.9788, 116.30226]).addTo(map)
  .bindPopup('北京天猫园')
  .openPopup();
 
// 以上代码创建了一个显示北京天猫园位置的地图,并使用天地图作为底图。

这段代码演示了如何使用Leaflet.js和其天地图插件leaflet-tilelayer-tm创建一个简单的WebGIS应用。首先引入必要的库,然后初始化地图,设置中心点和缩放级别,添加天地图图层,控件和标记。这是一个基本的入门示例,展示了如何开始进行WebGIS开发。

2024-08-07

js-md5 是一个用于JavaScript的MD5加密库。它可以很方便地被集成到你的项目中,并提供高效的MD5加密服务。

以下是如何使用 js-md5 的一个简单示例:

首先,你需要通过npm或者直接在HTML中通过script标签引入 js-md5 库。

通过npm安装:




npm install js-md5

在JavaScript文件中使用:




const md5 = require('js-md5');
 
let hash = md5('Hello, world!');
console.log(hash); // 输出: b10a8db164e07508c927850e27e85349a

如果是在HTML中使用,你可以这样:




<script src="path_to_js-md5/md5.min.js"></script>
<script>
  let hash = md5('Hello, world!');
  console.log(hash); // 输出: b10a8db164e07508c927850e27e85349a
</script>

js-md5 提供了一个简单的接口来进行MD5加密,并且它是在浏览器和Node.js环境下都可以运行的。它是一个非常小巧且高效的库,非常适合用于加密敏感信息或者进行数据完整性校验。

2024-08-07

在Vue前端和Node.js后端实现邮件发送,你可以使用Node.js的Nodemailer库。以下是实现的基本步骤和示例代码:

  1. 安装Nodemailer:



npm install nodemailer
  1. 在Node.js后端创建邮件发送服务:



// nodemailer.js
const nodemailer = require('nodemailer');
 
const sendEmail = async (options) => {
  // 创建邮件发送器
  const transporter = nodemailer.createTransport({
    service: 'yourEmailService', // 例: 'gmail'
    auth: {
      user: 'youremail@example.com',
      pass: 'yourpassword'
    }
  });
 
  // 发送邮件
  try {
    const info = await transporter.sendMail({
      from: '"Your Name" <youremail@example.com>', // 可以是任何已验证的邮箱地址
      to: options.email, // 邮件接收者
      subject: options.subject, // 邮件主题
      text: options.text, // 纯文本内容
      html: options.html // HTML内容
    });
 
    console.log(`Message sent: ${info.messageId}`);
 
    if (options.callback) {
      options.callback(null, 'success');
    }
  } catch (error) {
    console.error('Error sending email: ', error);
    if (options.callback) {
      options.callback(error, null);
    }
  }
};
 
module.exports = sendEmail;
  1. 在Vue前端发送请求到Node.js服务器:



// Vue组件中
import axios from 'axios';
import sendEmail from './path/to/nodemailer.js';
 
export default {
  methods: {
    async sendMail() {
      try {
        await sendEmail({
          email: 'recipient@example.com',
          subject: 'Your Subject',
          text: 'Plain text content',
          html: '<b>HTML content</b>',
          callback: (err, success) => {
            if (err) {
              console.error(err);
            } else {
              console.log(success);
            }
          }
        });
      } catch (error) {
        console.error('Error sending email: ', error);
      }
    }
  }
};

确保你的邮箱服务(如Gmail、Outlook等)允许不太安全的应用访问,并在代码中正确配置用户名和密码。

注意:出于安全考虑,不要将用户名和密码硬编码在前端代码中,而是应该在后端安全地管理凭据,并通过API调用的方式进行邮件发送。

2024-08-07

在Node.js中处理图片,常用的库有sharp、jimp和webconvert。以下是每个库的简单使用示例:

  1. 使用sharp:

安装sharp:




npm install sharp

示例代码:




const sharp = require('sharp');
 
sharp('input.jpg')
  .resize(200, 200)
  .toFile('output.jpg')
  .then(function(new_file_info) {
      console.log("图片处理成功,输出路径:" + new_file_info.path);
  })
  .catch(function(err) {
      console.log("发生错误:" + err);
  });
  1. 使用jimp:

安装jimp:




npm install jimp

示例代码:




const Jimp = require('jimp');
 
Jimp.read('input.jpg')
  .then(image => {
    image.resize(200, 200) // 宽度和高度
         .write('output.jpg');
  })
  .catch(err => {
    console.error(err);
  });
  1. 使用webconvert:

安装webconvert:




npm install webconvert

示例代码:




const webconvert = require('webconvert');
 
webconvert.convert({
  input: 'input.jpg',
  output: 'output.jpg',
  operation: 'resize',
  width: 200,
  height: 200
}, function(error, result) {
  if (error) {
    console.error(error);
  } else {
    console.log('图片处理成功,输出路径:' + result.output);
  }
});

以上代码展示了如何使用sharp、jimp和webconvert这三个库来读取一个原始图片文件,并将其缩放到200x200像素大小,然后将处理后的图片保存到指定路径。sharp和jimp是需要先安装再使用的npm包,而webconvert则是通过调用在线API服务实现图片处理。

2024-08-07

在Node.js中,你可以使用NPM(Node Package Manager)来发布你的包。以下是发布NPM包的基本步骤:

  1. 确保你已经在npm官网注册账号。
  2. 登录到你的npm账号。



npm login
  1. 确保你的包的package.json文件中的版本号是正确的,并且更新到你想要发布的版本。
  2. 确保你的包的README.md文件是存在的,因为npm会要求你有一个README文件。
  3. 在命令行中运行以下命令来发布你的包。



npm publish

如果你想更新你的包,你只需要更新package.json中的版本号,然后再次运行npm publish

以下是一个简单的package.json文件示例:




{
  "name": "example-package",
  "version": "1.0.0",
  "description": "A sample Node.js package",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "sample",
    "test"
  ],
  "author": "Your Name",
  "license": "ISC"
}

确保你的包中包含一个入口点文件,如index.js,并且它应该导出你想要公开的模块或函数。

2024-08-07

在JavaScript中,可以使用encodeURIencodeURIComponentdecodeURIdecodeURIComponent函数来对URL进行编码和解码。

  1. encodeURI():用于编码整个URI。它不会对特定的字符进行编码:字母、数字、( )*-._~
  2. encodeURIComponent():用于编码URI组件。它会对以下特定的字符进行编码:非字母数字字符、:/?#[]@
  3. decodeURI():用于解码由encodeURI()编码的URI。
  4. decodeURIComponent():用于解码由encodeURIComponent()编码的URI组件。

示例代码:




// 原始URL
let originalURL = "https://www.example.com/?query=Hello World!#Section";
 
// 编码URL
let encodedURL = encodeURI(originalURL);
console.log(encodedURL); // 输出: https://www.example.com/?query=Hello%20World!#Section
 
let encodedURLComponent = encodeURIComponent(originalURL);
console.log(encodedURLComponent); // 输出: https%3A%2F%2Fwww.example.com%2F%3Fquery%3DHello%20World%21%23Section
 
// 解码URL
let decodedURL = decodeURI(encodedURL);
console.log(decodedURL); // 输出: https://www.example.com/?query=Hello World!#Section
 
let decodedURLComponent = decodeURIComponent(encodedURLComponent);
console.log(decodedURLComponent); // 输出: https://www.example.com/?query=Hello World!#Section
2024-08-07

在Three.js中,要将一个3D对象居中,并获取其中心点,可以使用以下步骤:

  1. 计算3D对象的包围盒(BoundingBox)。
  2. 获取包围盒的中心点。
  3. 将3D对象的位置设置为中心点位置。

以下是实现这些步骤的示例代码:




// 假设我们有一个3D对象(mesh)
 
// 1. 计算包围盒
const box = new THREE.Box3().setFromObject(mesh);
 
// 2. 获取包围盒中心点
const center = new THREE.Vector3();
box.getCenter(center);
 
// 3. 将对象位置设置为中心点
mesh.position.copy(center);

在这段代码中,我们首先创建了一个THREE.Box3对象,并使用setFromObject方法计算出给定3D对象的包围盒。然后,我们使用getCenter方法从包围盒中获取了中心点,最后将3D对象的位置设置为计算出的中心点。这样,3D对象就会居中在场景中了。

2024-08-07

在现代浏览器中,可以使用fetch API来发送HTTP请求。以下是一个使用fetch发送GET和POST请求的例子:




// 发送GET请求
fetch('https://api.example.com/data', {
  method: 'GET',
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
 
// 发送POST请求
fetch('https://api.example.com/data', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ key: 'value' }),
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

如果需要支持旧版浏览器,可以使用XMLHttpRequest




// 发送GET请求
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data', true);
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    var response = JSON.parse(xhr.responseText);
    console.log(response);
  }
};
xhr.send();
 
// 发送POST请求
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://api.example.com/data', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4 && xhr.status === 200) {
    var response = JSON.parse(xhr.responseText);
    console.log(response);
  }
};
xhr.send(JSON.stringify({ key: 'value' }));

请注意,在实际生产环境中,你可能需要处理更多的错误情况和响应状态码,并且可能还需要处理跨域请求等问题。

2024-08-07

在Nuxt.js中使用axios并进行二次封装,可以通过以下步骤实现:

  1. 安装axios:



npm install axios
  1. plugins目录下创建axios.js文件,并编写二次封装的代码:



// plugins/axios.js
import axios from 'axios';
 
let axiosInstance = axios.create({
  baseURL: 'http://your-api-url/',
  // 其他配置...
});
 
// 添加请求拦截器
axiosInstance.interceptors.request.use(config => {
  // 可以在这里添加例如token等请求头
  // if (store.state.token) {
  //   config.headers.common['Authorization'] = `Bearer ${store.state.token}`;
  // }
  return config;
}, error => {
  return Promise.reject(error);
});
 
// 添加响应拦截器
axiosInstance.interceptors.response.use(response => {
  // 对响应数据做处理
  return response.data;
}, error => {
  // 处理响应错误
  return Promise.reject(error);
});
 
export default axiosInstance;
  1. nuxt.config.js中配置axios插件:



// nuxt.config.js
export default {
  // ...
  plugins: [
    '@/plugins/axios'
  ],
  // ...
}
  1. 在组件或页面中使用封装后的axios实例:



// 在组件中
export default {
  async fetch() {
    const response = await this.$axios.get('/your-endpoint');
    this.data = response;
  }
}

通过以上步骤,你可以在Nuxt.js项目中使用二次封装的axios实例,并能够方便地在请求和响应中添加全局的处理逻辑。

2024-08-07

Highlight.js 和 Markdown-it 是两个常用的JavaScript库,分别用于代码高亮和Markdown解析。以下是如何将它们结合使用的示例代码:

  1. 首先,确保在你的项目中包含了这两个库的CSS和JavaScript文件。
  2. 在HTML文件中,创建一个容器来显示高亮后的代码和解析后的Markdown。



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Highlight.js and Markdown-it Example</title>
    <link rel="stylesheet" href="path/to/highlight.js/styles/default.css">
    <script src="path/to/highlight.js/highlight.pack.js"></script>
    <script src="path/to/markdown-it.js"></script>
</head>
<body>
    <div id="code-container"></div>
    <div id="markdown-container"></div>
    <script>
        // 初始化Markdown-it
        var md = markdownit();
 
        // 初始化Highlight.js
        hljs.initHighlightingOnLoad();
 
        window.onload = function() {
            // 示例代码
            var code = '```javascript\nconsole.log("Hello, World!");\n```';
 
            // 将代码放入代码容器
            document.getElementById('code-container').innerHTML = code;
 
            // 解析Markdown并放入Markdown容器
            document.getElementById('markdown-container').innerHTML = md.render(code);
        };
    </script>
</body>
</html>

在这个例子中,我们首先在HTML的<head>部分包含了Highlight.js和Markdown-it的CSS和JavaScript文件。然后,在<body>中创建了两个<div>容器,分别用于显示高亮后的代码和解析后的Markdown。在<script>标签中,我们初始化了Markdown-it,并在页面加载完成后通过Highlight.js的initHighlightingOnLoad函数进行代码高亮。最后,我们使用Markdown-it的render函数将代码块解析为HTML,并将其显示在页面上。