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

跨设备调用Node.js Express API时PUT请求失败求助

跨设备PUT请求失败的排查与修复方案

一、立即修复:客户端请求URL错误

另一台电脑的fetch代码里用了http://localhost:98/machines,localhost指的是发起请求的电脑本身,不是你的API服务器。必须把localhost换成API所在电脑的局域网IP(比如192.168.1.x,具体可以在服务器上用ipconfig或ifconfig查看)。

修改后的客户端代码:

fetch('http://192.168.1.xxx:98/machines', { // 替换xxx为API服务器的局域网IP
    method: 'PUT',
    headers: {
        'Content-Type': 'application/json',
        'Accept': '*/*'
    },
    body: JSON.stringify(localStorageData)
})
.then(response => {
    console.log(response);
})
.catch(error => {
    console.error('Error:', error);
});

二、API代码的两处错误修正

1. 条件判断的赋值错误

你写的if (req.body = {} || !req.body)是赋值操作(=),不是相等判断,这会导致永远触发418状态码,而且逻辑完全错误。改成判断空对象的正确写法:

if (!req.body || Object.keys(req.body).length === 0) {
    res.status(418).send({message:'We need a json'})
    return
}

2. 中间件与服务器启动顺序问题

app.listen()应该放在所有中间件和路由注册的最后,否则可能导致部分中间件(比如express.json())无法生效。同时express.json()必须在路由之前注册,才能正确解析PUT请求的JSON体。调整后的API代码:

const { getAllSoftware, updateMachines } = require('./services/db');
const express = require('express');
const cors = require('cors'); 
const app = express();
const PORT = 98;

// CORS配置
const corsOptions = {
    origin: ['http://192.168.1.99:94', 'http://localhost:94'],
};

// 先注册中间件
app.use(cors(corsOptions));
app.use(express.json()); // 解析JSON请求体,必须在路由前

// 注册PUT路由
app.put('/machines', async (req, res) => {
    console.log(req.body);
    if (!req.body || Object.keys(req.body).length === 0) {
        res.status(418).send({message:'We need a json'})
        return
    }

    // 把req改成req.body并转成字符串,否则会显示[object Object]
    res.status(200).send({
        machine: `dit is je machine met je json ${JSON.stringify(req.body)}`
    })
});

// 最后启动服务器
app.listen(PORT, () => console.log(`Server is running on port ${PORT}`));

三、额外注意点

  • 确认客户端的localStorageData:如果它已经是JSON字符串(比如从localStorage取出的"{}"),直接用body: localStorageData即可,不需要再JSON.stringify,否则会生成无效的JSON(""{}"")。
  • 再次确认两台电脑在同一局域网,能互相ping通对方IP,服务器防火墙确实关闭或开放了98端口的入站规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:06:28