javascript - 如何将数组从 html 发送到 node.js,然后再发送到 mongodb?

标签 javascript jquery html node.js mongodb

需要将longlat 的值作为一个数组发送到输入中,然后将其保存到数据库中。找到了很多解释如何处理数组的示例,但大多数都是在 PHP 中。 这是代码:

HTML

<html>
<head>
    <script>
        function geoFindMe() {
            var coordinates = document.getElementById("coordinates");
            if (!navigator.geolocation) {
                alert("Geolocation is not supported by your browser");
                return;
            }
            function success(position) {
                var latitude  = position.coords.latitude;
                var longitude = position.coords.longitude;
                var coordinates = [longitude, latitude];
                document.getElementById("coordinates").value = coordinates;
            }
            function error() { alert("Unable to retrieve your location"); }
            navigator.geolocation.getCurrentPosition(success, error);
        }
    </script>
</head>
<body>   
    <label for="pos">Allow location service</label>
    <input name="pos" id="coordinates" type="checkbox" onclick="geoFindMe()" value="coordinates[]">
</body>
</html>

app.js

app.post("/", (req, res) => {
    const newUser = new data({
        geometry: {
            type:'Point',
            coordinates: req.body.coordinates
        }
    });
});

data.js

const FindMyLocation = new Schema({
    geometry: {
        type: {
            type: String,
            default: 'Point'
        },
        coordinates: {
            type:[Number],
            index: '2dsphere'
        }
    }
});

感谢您的关注。

最佳答案

使用Ajax调用API发送请求。

<script>
        function geoFindMe() {
            var coordinates = document.getElementById("coordinates");
            if (!navigator.geolocation) {
                alert("Geolocation is not supported by your browser");
                return;
            }
            function success(position) {
                var latitude  = position.coords.latitude;
                var longitude = position.coords.longitude;
                var coordinates = [longitude, latitude];
                document.getElementById("coordinates").value = coordinates;
                var xhttp = new XMLHttpRequest();
                xhttp.open("POST",URL, true);
                xhttp.setRequestHeader('Content-type','application/json; charset=utf-8');
                xhttp.send(JSON.stringify({"coordinates":coordinates}));
            }
            function error() { alert("Unable to retrieve your location"); }
            navigator.geolocation.getCurrentPosition(success, error);
        }
    </script>

在你的 api 中你需要 mongoose 或 mongodb 包来插入

var data = require('data.js');
app.post("/", (req, res) => {
    const newUser = new data({
        geometry: {
            type:'Point',
            coordinates: req.body.coordinates
        }
    });
newUser.save(err => {
if (err) return res.status(500).send(err);
return res.status(200).send("your success message");
});

在您的 data.js 中,您需要在文件末尾添加,以便可以访问。

module.exports = mongoose.model('FindMyLocation', FindMyLocation );

关于javascript - 如何将数组从 html 发送到 node.js,然后再发送到 mongodb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52353557/

相关文章:

javascript - 如何仅将 *selected* 文本更改为大写,而不是选择存在的整个段落

php - jEditable 只采用一个 id

html - 某种编码值得信赖吗?

html - 嵌套绝对定位 div 中奇怪的文本换行行为

javascript - 如何查看外部 JSON 文件?

javascript - Angular 8 jsonp 回调未调用

javascript - css 或 javascript 动态定位

javascript - 无法使用 jquery 动态设置值

javascript - 如何在 HTML 输入中添加 "ok"按钮?

javascript - 使用 javascript 自动引用