Node.js 如何使用express呈现geojson?
我试图使用express.render将geojson添加到ejs文件中的vega lite可视化中,但我在浏览器中不断收到此错误消息:Node.js 如何使用express呈现geojson?,node.js,express,ejs,geojson,vega-lite,Node.js,Express,Ejs,Geojson,Vega Lite,我试图使用express.render将geojson添加到ejs文件中的vega lite可视化中,但我在浏览器中不断收到此错误消息: ReferenceError: /Users/karoline/Desktop/Afleveres/index.ejs:132 130| "layer": [{ 131| "data": { >> 132| "
ReferenceError: /Users/karoline/Desktop/Afleveres/index.ejs:132
130| "layer": [{
131| "data": {
>> 132| "values": <%- geoVisData %>,
133| "format": {
134| "type": "topojson",
135| "feature": "geometry"
geoVisData is not defined
at eval (eval at compile (/Users/karolineschafer/node_modules/ejs/lib/ejs.js:662:12), <anonymous>:10:17)
at index (/Users/karoline/node_modules/ejs/lib/ejs.js:692:17)
at tryHandleCache (/Users/karoline/node_modules/ejs/lib/ejs.js:272:36)
at View.exports.renderFile [as engine] (/Users/karoline/node_modules/ejs/lib/ejs.js:489:10)
at View.render (/Users/karoline/node_modules/express/lib/view.js:135:8)
at tryRender (/Users/karoline/node_modules/express/lib/application.js:640:10)
at Function.render (/Users/karoline/node_modules/express/lib/application.js:592:3)
at ServerResponse.render (/Users/karoline/node_modules/express/lib/response.js:1012:7)
at /Users/karoline/Desktop/Afleveres/server.js:13:14
at Layer.handle [as handle_request] (/Users/karoline/node_modules/express/lib/router/layer.js:95:5)
我的ejs文件中的代码如下所示:
const express = require('express');
const expressApp = express();
const fs = require("fs");
expressApp.set("view engine", "ejs")
expressApp.set("views", __dirname)
expressApp.get('/', function(request, response){
let visData = fs.readFileSync("visData.json", "utf-8");
let geoVisData = fs.readFileSync("koebenhavns-storkreds.geojson");
response.render('index', {
visData: visData,
geoVisData: geoVisData
});
})
app.use(Express.static(__dirname));
expressApp.listen(8080, function() {
console.log('listening on port 8080')
});
let mapVis = {
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"width": 1300,
"height": 1200,
"view": {"stroke": "transparent"},
"layer": [{
"data": {
"data": {"values": <%- geoVisData %>},
"format": {
"type": "topojson",
"feature": "geometry"
}
},
"projection": {
"type": "mercator"
},
"mark": {
"type": "geoshape",
"fill": "lightgray",
"stroke": "white"
}
}, {
"data": {"values": <%- visData %>},
"projection": {
"type": "mercator"
},
"mark": "circle",
"params": [{
"name": "show",
"select": {"type": "point", "fields": ["hygge"]},
"bind": "legend"
}],
"encoding": {
"longitude": {
"field": "longitude",
"type": "quantitative"
},
"latitude": {
"field": "latitude",
"type": "quantitative"},
"size": {
"value": 30
},
"tooltip": [
{"field": "name", "type": "nominal", "title": "Name"},
{"field": "neighborhood", "type": "nominal", "title": "Neighborhood"},
{"field": "accommodationType", "type": "nominal", "title": "Type"},
{"field": "price", "type": "quantitative", "title": "Price per night"}
],
"color": {
"field": "hygge", "type": "nominal", "title": "Hygge?",
"scale": {"range": ["#6BB7B9", "#FF5A5F"]}
},
"href": {"field": "link", "type": "nominal"},
"opacity": {
"condition": {"param": "show", "value": 1},
"value": 0.2
}
}
}
],
"config": {
"font": "Avenir"
}
}
json文件可以工作,但geojson文件不能工作。的ejs语法可能不正确。您可以尝试以下方法或任何一种。否则,您可以简单地将geoVisData定义为一个简单变量,并在vega lite配置中使用它。非常感谢您的回复!我试过了,它们也不起作用。我还尝试将geoVisData定义为一个简单的变量,但这也会导致问题——当我这样做时,可视化不会出现,我会在控制台中收到以下错误消息:gethttp://localhost:8080/favicon.ico [HTTP/1.1 404找不到5ms]并且在promise TypeError中未捕获:此.\u数据未定义