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

如何将客户端JS对象发送至Node服务器并用于MongoDB存储?

解决客户端JS对象传输到Node.js服务器并存入MongoDB的问题

首先,咱们得先搞清楚你之前的问题出在哪:你用$.get发送对象时,jQuery会自动把这个对象转成URL编码的查询字符串(比如title=title1&message=message1),而不是JSON格式。你在服务器端尝试把这个查询字符串当成JSON来解析,肯定会失败——因为它根本不是JSON结构,所以JSON.parse会报错。

下面给你两种可行的解决方案,按需选择:

方案一:继续用GET请求(简化处理)

其实Express已经帮你自动解析了GET请求的查询参数,根本不用自己去处理req._parsedOriginalUrl.query。直接用req.query就能拿到解析好的对象。

客户端代码(不用改)

var myobj = {}; 
myobj.title = "title1"; 
myobj.message = "message1";

$.get('/createA', myobj, function(data) { 
  console.log(JSON.parse(data)); 
});

服务器代码

router.get('/createA', function(req, res, next) {
  // req.query已经是解析好的JS对象了!
  const newItem = req.query;
  
  // 直接把这个对象存入MongoDB(假设你有对应的Model,比如叫Article)
  Article.create(newItem)
    .then(savedItem => {
      res.json({ success: true, data: savedItem });
    })
    .catch(err => {
      res.json({ success: false, error: err.message });
    });
});

方案二:改用POST请求(更推荐)

从REST规范来说,创建资源应该用POST请求,而且发送JSON格式的数据会更清晰,也适合更复杂的对象结构。

客户端代码

用$.ajax明确指定发送JSON格式的数据:

var myobj = {
  title: "title1",
  message: "message1"
};

$.ajax({
  url: '/createA',
  method: 'POST',
  contentType: 'application/json', // 告诉服务器我们发的是JSON
  data: JSON.stringify(myobj), // 把JS对象转成JSON字符串
  success: function(response) {
    console.log('保存成功:', response);
  },
  error: function(err) {
    console.error('保存失败:', err);
  }
});

服务器代码

首先要确保你的Express应用配置了解析JSON请求体的中间件(Express 4.16及以上版本自带,不用额外安装body-parser):

// 在你的app.js/主入口文件里添加
const express = require('express');
const app = express();

// 解析JSON格式的请求体
app.use(express.json());

然后路由代码:

router.post('/createA', function(req, res, next) {
  // req.body就是客户端发送的JSON解析后的JS对象
  const newItem = req.body;
  
  // 存入MongoDB
  Article.create(newItem)
    .then(savedItem => {
      res.json({ success: true, data: savedItem });
    })
    .catch(err => {
      res.json({ success: false, error: err.message });
    });
});

为什么之前的方法失败?

你之前拿到的req._parsedOriginalUrl.query是类似title=title1&message=message1的字符串,这是URL查询参数格式,不是JSON。JSON需要键值对用双引号包裹、逗号分隔(比如{"title":"title1","message":"message1"}),所以你用replace把%22换成单引号后,依然不符合JSON格式,自然无法被JSON.parse解析。

内容的提问来源于stack exchange,提问作者Alex M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:08:10