25 私有链接
安装koa2-cors:
npm install koa2-cors
const Koa = require('koa');
const cors = require('koa2-cors');
const app = new Koa();
app.use(cors({
origin: (ctx) => {
// 限制特定域名或根据条件动态设置
if (ctx.request.header.origin === 'http://allowed-origin.com') {
return 'http://allowed-origin.com';
}
return '*'; // 允许所有域名
},
allowMethods: ['GET', 'POST', 'PUT', 'DELETE'], // 限制允许的请求方法
allowHeaders: ['Content-Type', 'Authorization', 'Accept'], // 指定允许的请求头
credentials: true, // 是否允许发送cookie
}));
// 其他中间件
app.use(async ctx => {
ctx.body = 'CORS enabled!';
});
app.listen(3000);
高级注意事项:
安全性考虑:
生产环境中尽量避免使用'*'作为origin值,特别是如果credentials设置为true时,这会导致安全隐患,确保origin只允许可信域名。
动态控制:
根据不同请求动态返回CORS设置,特别是针对不同的API,可以使用自定义逻辑来动态决定是否允许跨域请求。
复杂请求:
某些带有自定义请求头或非简单方法(如PUT、DELETE)的请求是“预检请求”,确保在返回响应头时正确处理Access-Control-Allow-Headers和Access-Control-Allow-Methods。
这样就可以在Koa2中灵活地控制和管理CORS设置。
使用'*'作为origin值
const Koa = require('koa');
const cors = require('koa2-cors');
const app = new Koa();
app.use(cors({
origin: '*', // 允许所有域名
allowMethods: ['GET', 'POST', 'PUT', 'DELETE'], // 允许的请求方法
allowHeaders: ['Content-Type', 'Authorization', 'Accept'], // 允许的请求头
credentials: false, // 开发环境下不需要cookie,设置为false
}));
app.use(async ctx => {
ctx.body = 'CORS enabled with * origin!';
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});在 PostgreSQL 中,默认情况下,所有表都被创建在 public 模式(schema)下。不过,你可以指定一个不同的模式,或者在创建模型时选择使用自定义的模式。你也可以通过 Sequelize 的 schema 方法在指定的模式下创建表。
- 新建一个模式
首先,你需要确保在 PostgreSQL 数据库中创建了自定义模式。你可以通过以下 SQL 命令新建一个模式(假设模式名为 custom_schema):
CREATE SCHEMA custom_schema;、
- 使用 Sequelize 配置自定义模式
在 Sequelize 中,你可以通过 schema 方法为模型指定自定义的模式。你可以全局指定模式,或者为每个模型单独指定模式。
2.1 为所有模型设置默认模式
如果你希望所有模型都使用某个自定义的模式,可以在 define 配置中指定 schema 选项:
const { Sequelize } = require('sequelize');
// 初始化 Sequelize,连接到 PostgreSQL 数据库
const sequelize = new Sequelize('cadre_evaluation', 'postgres', '123456', {
host: 'localhost', // PostgreSQL 数据库所在的主机
dialect: 'postgres', // 使用 PostgreSQL
port: 5432, // 默认 PostgreSQL 端口号
logging: false, // 禁用日志
define: {
schema: 'custom_schema' // 这里指定全局模式
}
});
// 测试连接
sequelize.authenticate()
.then(() => {
console.log('已成功建立连接。');
sequelize.sync({ force: false }) // force: true 将强制重建表
.then(() => {
console.log('数据库和表已创建!');
});
})
.catch(err => {
console.error('无法连接到数据库:', err);
});
module.exports = sequelize;
这样,所有模型在被创建时都会使用 custom_schema 模式,而不是默认的 public 模式。
2.2 为特定模型设置自定义模式
如果你只想为某些模型指定模式,可以在定义模型时使用 schema 方法:
const User = sequelize.define('User', {
// 定义字段
firstName: {
type: Sequelize.STRING,
allowNull: false
},
lastName: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING,
allowNull: false,
unique: true
}
});
// 为该模型使用特定的 schema
User.sync({ schema: 'custom_schema' })
.then(() => {
console.log('User 表已在 custom_schema 模式下创建!');
})
.catch(err => {
console.error('无法创建表:', err);
});
- 在 PostgreSQL 中创建并授权模式
如果你使用了自定义模式,你需要确保 PostgreSQL 中创建了这个模式,并且适当的权限被授予给用户。例如,创建一个新的模式并授权 postgres 用户访问:
CREATE SCHEMA custom_schema;
GRANT ALL PRIVILEGES ON SCHEMA custom_schema TO postgres;
总结
你可以通过 define 选项全局指定默认的模式。
也可以在模型定义时通过 schema 方法为每个模型指定自定义的模式。
确保自定义模式已经在 PostgreSQL 中创建,并且适当的权限被授予使用该模式的用户。
Docker安装On-Prem-Server:
apk update
apk add docker
docker pull navicat/navicatonpremserver:1.2.0
docker run -d -p 3030:3030 --mac-address="92:20:de:b0:5b:51" -v navicat_onprem_server_var_data:/opt/navicatonpremserver/x86_64-linux-gnu/var -v docker run -d --restart always -p 3030:3030 --mac-address="92:20:de:b0:5b:51" -v navicat_onprem_server_var_data:/opt/navicatonpremserver/x86_64-linux-gnu/var -v navicat_onprem_server_cert_data:/opt/navicatonpremserver/x86_64-linux-gnu/cert navicat/navicatonpremserver:1.2.0
完全删除实例:
docker ps
docker stop <container_id_or_name>
docker rm <container_id_or_name>
docker volume rm navicat_onprem_server_var_data navicat_onprem_server_cert_data
docker run -d -p 3030:3030 --mac-address="92:20:de:b0:5b:51" -v navicat_onprem_server_var_data:/opt/navicatonpremserver/x86_64-linux-gnu/var -v docker run -d --restart always -p 3030:3030 --mac-address="92:20:de:b0:5b:51" -v navicat_onprem_server_var_data:/opt/navicatonpremserver/x86_64-linux-gnu/var -v navicat_onprem_server_cert_data:/opt/navicatonpremserver/x86_64-linux-gnu/cert navicat/navicatonpremserver:1.2.0
更新实例:
docker stop <container_id_or_name>
docker update --restart always <container_id_or_name>
docker start <container_id_or_name>
将容器打包为镜像:
docker commit <container_id_or_name> my_navicat_image:1.0
docker images
使用新镜像创建容器:
docker run -d --restart always -p 3030:3030 --mac-address="92:20:de:b0:5b:51" -v navicat_onprem_server_var_data:/opt/navicatonpremserver/x86_64-linux-gnu/var -v navicat_onprem_server_cert_data:/opt/navicatonpremserver/x86_64-linux-gnu/cert my_navicat_image:1.0
备份镜像:
docker save -o my_navicat_image.tar my_navicat_image:1.0
恢复镜像:
通过 docker load 命令恢复镜像:
docker load -i my_navicat_image.tarcertbot-nginx添加定时任务,每月一次:
vi /var/spool/cron/crontabs/root
0 0 1 * * root sleep 2976 && certbot renew -q以下是根据学习Rust编程的难度,从简单到高级排列的推荐网站和资源:
初级(入门级):
https://www.rust-lang.org/
Rust官网:了解Rust语言的基本信息和生态系统。
https://doc.rust-lang.org/book/
The Rust Programming Language (The Book):官方权威入门书籍,适合从零开始学习。
https://github.com/rust-lang/rustlings
Rustlings:互动式练习项目,通过简单的练习题目帮助初学者掌握基础知识。
https://doc.rust-lang.org/rust-by-example/
Rust by Example:通过实例学习Rust基础概念,非常适合初学者。
中级(进阶级):
https://www.udemy.com/
Udemy:提供多个Rust编程的在线课程,适合有一定基础后系统化进阶学习。
https://www.coursera.org/learn/rust-programming
Coursera:提供结构化的Rust课程,帮助深入理解Rust编程。
https://www.youtube.com/results?search_query=rust+programming
YouTube上的Rust编程频道:观看进阶Rust编程的视频教程,适合以视觉学习为主的学习者。
高级(高级和实战):
https://rust-lang-nursery.github.io/rust-cookbook/
Rust Cookbook:提供各种实际应用的代码示例,帮助理解高级编程模式和技巧。
https://github.com/rust-unofficial/awesome-rust
Awesome Rust:收集了大量高级资源,包括库、工具和文章,适合深入研究和实战应用。
https://www.rust-lang.org/zh-CN/community
Rust用户论坛:参与社区讨论,解决具体问题,并与其他Rust编程者交流。
https://stackoverflow.com/questions/tagged/rust
Stack Overflow:查阅和提问Rust相关问题,解决编程中的具体挑战。
依照这个顺序进行学习,可以从基础入手,逐步深入理解Rust编程,并最终能够应用于实际项目和高级编程场景。
https://play.rust-lang.org/
在Rust Playground中尝试Rust在线,无需在计算机上安装任何内容。