Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在节点js上创建传单tileLayer对象并将其作为express API的响应发送_Node.js_Express_Leaflet - Fatal编程技术网

Node.js 如何在节点js上创建传单tileLayer对象并将其作为express API的响应发送

Node.js 如何在节点js上创建传单tileLayer对象并将其作为express API的响应发送,node.js,express,leaflet,Node.js,Express,Leaflet,所以我现在面临的问题是,我能够在NodeJS中创建传单对象,并使用express将响应作为对象发送。现在这个api工作正常,但是我无法在前端使用api响应 在API的后端,我使用express、传单和模拟浏览器(用于在后端模拟浏览器)npm模块,但如果我在前端创建相同的对象,则响应不同 我应该如何在NodeJS中创建与前端相同的对象,并在简单的网页上使用它 我的api的代码如下所示: const MockBrowser = require('mock-browser').mocks.MockBr

所以我现在面临的问题是,我能够在NodeJS中创建传单对象,并使用express将响应作为对象发送。现在这个api工作正常,但是我无法在前端使用api响应

在API的后端,我使用express、传单和模拟浏览器(用于在后端模拟浏览器)npm模块,但如果我在前端创建相同的对象,则响应不同

我应该如何在NodeJS中创建与前端相同的对象,并在简单的网页上使用它

我的api的代码如下所示:

const MockBrowser = require('mock-browser').mocks.MockBrowser;
const mock = new MockBrowser();
global['window'] = mock.getWindow();
global['document'] = mock.getDocument();
global['navigator'] = mock.getNavigator();
const express = require('express');
const L = require('leaflet');
const app = express()
const port = 3000


app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

let overlay = L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=your_mapbox_access_token', {
                  attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
                  maxZoom: 18,
                  id: 'mapbox/streets-v11',
                  accessToken: 'your_mapbox_access_token'
              });

app.get('/', (request, response) => {
    response.send({ data: overlay })
});


app.listen(port, () => {
    console.log(`App running on port ${port}.`)
});


首先请注意,任何http请求都只传递字符串。这样的字符串可以对序列化数据进行编码。但不是JS对象。@ghybs这意味着在我的例子中,我们不能反序列化通过http发送的对象文本?确实如此。如果你检查你的网络响应,你应该看到你的对象试图序列化它,很可能丢失了很多部分。这是一个极端的情况,一般情况下,你不能在两个映射之间共享一个层-请参阅
// after setting up leaflet environment is JS
var mymap = L.map('mapid').setView([51.505, -0.09], 13);   
function mapit(){
            $.ajax({
            url: 'http://localhost:3000/',
            success: function(res){
                res['data'].addTo(mymap);
                }
            });
        }