在 n8n 的世界里,变量(Variables) 是一个强大的功能,它允许你存储和重复使用值,使工作流更加灵活、可维护性更强。无论是 API 密钥、用户信息,还是需要在多个工作流中共享的配置值,变量都能轻松应对。
n8n 变量是一种只读存储机制,用于保存你想在工作流中重复使用的值。它们在工作流执行时被替换为实际值,使你无需硬编码就能轻松管理配置和敏感信息。
全局变量对你的 n8n 实例中的所有项目 都可用。这意味着任何人都可以在任何工作流中访问它们。
适用场景:
项目变量仅在 特定项目内 可用。只有该项目中的工作流才能访问这些变量。
适用场景:
重要提示: 项目变量需要 n8n 版本 1.118.0 及以上。
当项目级变量和全局变量同名时,项目级变量优先。这确保了项目特定的设置会覆盖全局默认值。
Key(键) - 变量的名称,最大 50 个字符
API_KEY、SLACK_WEBHOOK、EMAIL_FROMValue(值) - 变量的实际值,最大 1000 个字符
https://api.example.com、xoxb-1234567890...Global - 变量对整个实例可用
Project - 变量仅在特定项目可用(选择相应项目)
从项目页创建时,作用域自动设为该项目。
点击 Save 按钮。变量现在可在你的工作流中使用。
在 Code node 中,你可以直接访问变量。以下是常见的访问方式:
// 访问变量
const apiKey = $env.API_KEY;
const slackWebhook = $env.SLACK_WEBHOOK;
// 在代码中使用
console.log(`Using API Key: ${apiKey}`);在任何支持表达式的字段中,使用以下格式:
{{ $env.VARIABLE_NAME }}具体例子:
{{ $env.API_KEY }}Hello {{ $env.USERNAME }}{{ $env.DB_CONNECTION_STRING }}大多数 n8n 节点都支持在以下字段中使用变量:
undefined,工作流不会自动失败你需要创建一个工作流,该工作流从 Webhook 接收数据,然后通过 SMTP 服务发送邮件。为了安全和可维护性,所有敏感信息(如 SMTP 服务器地址、邮箱等)都应该存储为变量。
在 n8n 中创建以下变量:
| Key | Value | 说明 |
|---|---|---|
SMTP_HOST | smtp.gmail.com | SMTP 服务器地址 |
SMTP_PORT | 587 | SMTP 端口 |
EMAIL_FROM | noreply@company.com | 发件人邮箱 |
EMAIL_PASSWORD | your_app_password | 邮箱密码或应用专用密码 |
COMPANY_NAME | My Company | 公司名称 |
Webhook Trigger → Process Data → Send Email → Response{
"name": "Email Automation with Variables",
"nodes": [
{
"parameters": {
"path": "send-email",
"responseMode": "onReceived"
},
"id": "webhook",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
250,
300
]
},
{
"parameters": {
"mode": "manual",
"fields": {
"values": [
{
"name": "recipientEmail",
"value": "= $json.body.email"
},
{
"name": "recipientName",
"value": "= $json.body.name"
},
{
"name": "emailSubject",
"value": "= 'Welcome to ' + $env.COMPANY_NAME"
}
]
}
},
"id": "set_data",
"name": "Extract & Process Data",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
450,
300
]
},
{
"parameters": {
"fromEmail": "= $env.EMAIL_FROM",
"toEmail": "= $json.recipientEmail",
"subject": "= $json.emailSubject",
"textContent": "= 'Hello ' + $json.recipientName + ',\\n\\nWelcome to ' + $env.COMPANY_NAME + '!\\n\\nBest regards,\\n' + $env.COMPANY_NAME + ' Team'",
"protocol": "tls",
"host": "= $env.SMTP_HOST",
"port": "= parseInt($env.SMTP_PORT)",
"user": "= $env.EMAIL_FROM",
"password": "= $env.EMAIL_PASSWORD"
},
"id": "send_email",
"name": "Send Email",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 1,
"position": [
650,
300
]
},
{
"parameters": {
"mode": "manual",
"fields": {
"values": [
{
"name": "status",
"value": "success"
},
{
"name": "message",
"value": "Email sent successfully"
}
]
}
},
"id": "response",
"name": "Return Response",
"type": "n8n-nodes-base.set",
"typeVersion": 3,
"position": [
850,
300
]
}
],
"connections": {
"webhook": {
"main": [
[
{
"node": "set_data",
"type": "main",
"index": 0
}
]
]
},
"set_data": {
"main": [
[
{
"node": "send_email",
"type": "main",
"index": 0
}
]
]
},
"send_email": {
"main": [
[
{
"node": "response",
"type": "main",
"index": 0
}
]
]
}
}
}接收来自外部系统的 POST 请求,数据格式:
{
"email": "user@example.com",
"name": "John Doe"
}$env.COMPANY_NAME 变量组成邮件主题EMAIL_FROM、SMTP_HOST、SMTP_PORT、EMAIL_PASSWORD返回成功状态给调用方
curl -X POST http://your-n8n-url/webhook/send-email \
-H "Content-Type: application/json" \
-d '{
"email": "test@example.com",
"name": "Test User"
}'✅ 安全:敏感信息存储在变量中,不暴露在工作流中
✅ 易于迁移:更换环境时只需修改变量值
✅ 可维护:集中管理所有配置
✅ 可重用:其他工作流也可以使用相同的变量
A: n8n 会将其视为 undefined。工作流不会自动失败,但可能导致后续节点出错。建议在使用变量前进行验证。
if ($env.API_KEY === undefined) {
throw new Error('API_KEY variable is not set');
}A: 不行。变量是只读的。如果需要在工作流中设置和访问自定义数据,请使用 Workflow Static Data 功能。
A: 只支持:
A:
A: 创建相同 Key 的项目变量,在各个环境对应的项目中设置不同的 Value 值。每个项目的工作流会使用该项目的变量值。
使用大写字母和下划线,使变量名清晰明确:
API_KEY_SLACKSMTP_HOSTapiKey (不符合约定)api-key (包含不支持的字符)为每个变量添加描述和用途说明,便于团队理解:
n8n 的自定义变量功能为你的自动化工作提供了一个强大的配置管理系统。通过合理使用全局和项目级变量,你可以创建更加安全、易维护、可扩展的工作流。
关键要点:
{{ $env.VARIABLE_NAME }} 在表达式中访问现在,你已经掌握了 n8n 变量的核心知识!开始在你的工作流中应用这些技巧,让自动化更加高效、安全、可维护。
[1] 官方文档: https://docs.n8n.io/code/variables/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#