You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从NodeJS主动向Django发送JSON数据?

NodeJS主动向Django推送JSON数据的实现方案

Django 端:创建接收JSON的API接口

  1. 编写视图函数
    在你的Django应用的views.py中,添加一个处理POST请求的视图,专门接收NodeJS发来的JSON数据:
import json
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt  # 跨域场景必须添加,同域环境可移除(或配置CSRF白名单)
def receive_node_data(request):
    if request.method == 'POST':
        try:
            # 解析请求体中的JSON数据
            data = json.loads(request.body)
            # 此处添加业务逻辑:如存入数据库、触发内部流程等
            print("收到NodeJS推送的数据:", data)
            return JsonResponse({"status": "success", "message": "数据接收成功"}, status=200)
        except json.JSONDecodeError:
            return JsonResponse({"status": "error", "message": "无效的JSON格式"}, status=400)
    else:
        return JsonResponse({"status": "error", "message": "仅支持POST请求"}, status=405)
  1. 配置URL路由
    在应用的urls.py中,将视图映射到指定URL路径:
from django.urls import path
from . import views

urlpatterns = [
    # 其他路由...
    path('api/receive-node-data/', views.receive_node_data, name='receive_node_data'),
]
  1. 跨域处理(必选,若两端不同域)
    如果NodeJS和Django服务运行在不同域名/端口下,需安装并配置django-cors-headers允许跨域请求:
  • 安装依赖:pip install django-cors-headers
  • 在settings.py中添加配置:
INSTALLED_APPS = [
    # 其他应用...
    'corsheaders',
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',  # 需放在中间件列表最前方
    'django.middleware.common.CommonMiddleware',
    # 其他中间件...
]

# 生产环境建议指定具体域名,而非允许所有
CORS_ALLOW_ALL_ORIGINS = True

NodeJS 端:主动发送JSON数据到Django

  1. 选择HTTP客户端
    推荐使用易用的第三方库axios,先安装:
npm install axios
  1. 封装发送函数
    编写发送逻辑,在数据生成后立即调用该函数推送至Django:
const axios = require('axios');

// 替换为你的Django服务实际地址
const DJANGO_API_URL = 'http://your-django-domain:port/api/receive-node-data/';

async function sendToDjango(jsonData) {
    try {
        const response = await axios.post(DJANGO_API_URL, jsonData, {
            headers: {
                'Content-Type': 'application/json',
                // 若需身份验证,在此添加凭证,如:
                // 'Authorization': 'Bearer YOUR_AUTH_TOKEN'
            }
        });
        console.log('数据发送成功,Django返回:', response.data);
    } catch (error) {
        console.error('发送数据失败:', error.response?.data || error.message);
        // 可选:添加重试逻辑,避免网络波动导致数据丢失
        // setTimeout(() => sendToDjango(jsonData), 5000);
    }
}

// 模拟数据生成场景:此处替换为你的实际数据生成逻辑
function generateData() {
    const newData = {
        id: Date.now(),
        content: 'NodeJS生成的业务数据',
        timestamp: new Date().toISOString()
    };
    // 数据生成后立即推送
    sendToDjango(newData);
}

// 测试:每5秒生成并推送一次数据
setInterval(generateData, 5000);

如果不想依赖第三方库,可使用NodeJS内置http模块实现:

const http = require('http');

function sendToDjango(jsonData) {
    const data = JSON.stringify(jsonData);
    const options = {
        hostname: 'your-django-domain',
        port: 'port',
        path: '/api/receive-node-data/',
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(data)
        }
    };

    const req = http.request(options, (res) => {
        let responseData = '';
        res.on('data', (chunk) => responseData += chunk);
        res.on('end', () => console.log('Django返回:', JSON.parse(responseData)));
    });

    req.on('error', (error) => console.error('发送失败:', error.message));
    req.write(data);
    req.end();
}

额外注意事项

  • 身份验证:若Django接口需要权限,可使用TokenAuthentication或SessionAuthentication,NodeJS在请求头中携带对应凭证即可。
  • 可靠性保障:对关键业务数据,可引入消息队列(如Redis、RabbitMQ),NodeJS先将数据存入队列,再异步推送至Django,避免网络故障导致数据丢失。
  • 日志监控:在两端添加详细日志,便于排查发送/接收过程中的异常问题。

内容的提问来源于stack exchange,提问作者Alireza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:41:05