当前位置: 首页 > 知识库问答 >
问题:

如何使用客户端Javascript数组并通过node.js API发布到MongoDB数据库中?

凤安然
2023-03-14

我有一个单一的网页,最初有两个表单输入,一个是名字列表,另一个是游戏标题。我编写了一些JavaScript/jQuery,它使用X个名称,并为每个人的特定分数创建更多X个表单输入。然后,javascript在单击Names/Scores表单的submit按钮时创建以下变量:

gameTitle = Monopoly
users = [Bob, Bill, Jim, Janet]
scores = [100, 110, 90, 80]
positions = [2, 1, 3, 4]

然后将MongoDB模式设置为:

const SessionSchema = new mongoose.Schema({
gameTitle: String,
users: [],
scores: [],
positions: []
});

和node.js处理程序:

const express = require('express');
const router = express.Router();
const bodyParser = require('body-parser');
const timestamps = require('mongoose-timestamp');

router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());

const Session = require('./Session');

//Post a session to the database
router.post('/', function(req, res) {
    Session.create({
        gameTitle : req.body.gameTitle,
        users : req.body.user,
        scores : req.body.score,
        positions : req.body.position
    },
    function (err, session) {
        if (err) return res.status(500).send("There was a problem adding the information to the database");
        res.status(200).send(session);
    });
});

使用Postman,我可以看到当我使用以下格式时,张贴是有效的:

邮递员邮局

邮递员得到

我如何使用创建的javascript变量,并在单击Names/Scores表单的submit按钮时,通过API将它们发布到MongoDB数据库中?

如果我错过了任何重要的信息/代码,请原谅--我没有充分考虑后端的工作原理。

共有1个答案

秦鹏飞
2023-03-14

听起来你的后端工作正常。您缺少的是API请求。由于您的网站与API服务器不在同一host:port下,因此当从浏览器执行时,您将面临CORS问题。让我们稍后再谈这个问题:

首先,您将进行一个API调用。您可以使用axios或Fetch。让我们用fetch来表示:

fetch(url, {
  body: JSON.stringify(yourJavascriptVariablesAsAnObject),
  headers: {
    'Content-Type': 'application/json'
  },
  method: 'POST',
})
  .then(response => {
    // here you can check for status if you want.
    // ...

    return response.json(); // assuming server returns JSON.
  })
  .then(responseBody => {
    // Do something with the server's response body
  });

对于CORS问题,如果您的客户端应用程序来自create-react-app,或者至少您使用的是webpack-dev-server,那么您可以很容易地代理请求。

如果不允许,则需要在nodeJS服务器上允许CORS。最简单的方法是使用库。

ps:CORS基本上意味着您不能从浏览器向位于不同的`url:port:中的服务请求,除非该服务明确地表示它是OK的。

第三种选择是将UI和服务器项目都放在像Nginx这样的Web服务器之后,并代理请求,但这听起来对您需要的来说太复杂了。

 类似资料:
  • 我的Grails应用程序在开发模式下使用h2数据库(Grails应用程序的默认行为)。中的DB连接设置是 我正在尝试使用IntelliJ IDEA的数据库客户端工具为此数据库建立连接。我开始这样创建连接 然后在下面的对话框中,输入JDBC URL 并选择“模式”上的所有可用数据库 “Test Connection”(测试连接)按钮表示成功,但从红色圆圈中可以看到,没有找到任何表格。似乎我已经正确地

  • 尝试使用akka、rx、vert建立一个反应系统。x和mongodb中的流(下游)看起来很像: <代码>发布者- 我遇到了这样一种情况,上游在mongo上调用了太多的更新收集操作,结果是: <代码>com。mongodb。MongoWaitQueueFullException:等待连接的线程太多。已超过500个最大线程数(maxWaitQueueSize) 更新集合: > 在同一集合上执行 正在向

  • 我有点困惑AngularJS是如何将数据发布到我的WebAPI控制器的。通常,当我将数据从AngularJS发布到MVC控制器时,我会这样做: 但是,在WebAPI控制器中,字符串值总是返回为null。 在将数据传递到web api控制器时,是否需要以稍微不同的方式发布数据? 以下是我的控制器中的方法: 编辑不确定这是否有帮助,但这是小提琴手的标题: POSThttp://localhost:58

  • 问题内容: 如标题所示,我需要将一些数据(从数据库中获取)放入Excel工作表中,然后将其发送到客户端,以便用户可以保存,打开或取消操作。 我看到了一些与此有关的文章,最近的是:如何让用户下载文件?(Java,MVC,Excel,POI)。参考史蒂文斯提供的链接,我尝试了以下代码: 首先这里没有定义。其次,我无法正确理解代码的工作方式。 我还找到了此链接:http : //www.roseindi

  • 嘿, 我无法通过querystring将数据发布到action方法,action方法位于我的代码下面的控制器类中。 我键入一个url“http://localhost:53459/api/esb/post/test“发布价值,什么都不会发生 任何帮助都将不胜感激。

  • 我需要实现一个github授权,然后将接收到的数据(JSON)发送到客户端。 我找到了这篇教程http://shiya.io/how-to-do-3-legged-oauth-with-github-a-general-guide-by-example-with-node-js/ 在该教程中,开发人员向我们展示了如下内容:“/”->“/login”->“/redirect”->“/user”(此处