我在哪里使用 Sails.js 初始化和加载地图?

Where do I inizialize and load a map using Sails.js?

我正在使用 Sails.js 创建一个在 /map 路线上显示 Leaflet 地图的网站,我是否应该在视图中放置创建地图、设置标记、初始化 Firebase 的代码还是在其他文件中?

现在我在 /map 有一个 GET 路由,它加载了一个视图:

module.exports = function(req, res) {
     res.view('pages/map/home')
};

这段代码目前位于 home.ejs 的 <script> 标记中,但这是正确的位置吗?

var mymap = L.map('mapid').setView([51.505, -0.09], 13);

L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', {
    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: 'my_access_code'
}).addTo(mymap);

我想分离该代码,但不确定如何分离。 我也不确定如何导入 npm 模块,因为我不能在脚本标签中导入?

我应该在请求中加载 Firebase/the 地图,然后将结果(地图?)传递给视图吗?每次用户请求都要初始化Firebase,好像有点浪费,有没有其他办法?

the code that creates the map, sets the markers, initializes Firebase

这些都在视图中,至少是其中的一部分。客户端(浏览器)肯定需要初始化一些库来显示地图和标记,但是如果库也是为后端使用而设计的,您可以使用任何持久实例在服务器端进行准备Firebase 提供的对象。

how to import the npm modules

就我个人而言,我只是将我需要的单个文件或文件夹复制到 /assets/js 中,然后以老式的方式将它们包含在我的布局中。大多数用于前端的 node_modules 都会有一个包含实际前端文件的 dist/ 文件夹。

Should I load Firebase/the map inside the request and then pass the results (the map?) to the view? It seems a little wasteful to initialize Firebase every time users make the request, is there any other way?

如果模块设计用于后端,您可以在app.js中初始化它。 Sails 是一个服务器,而不仅仅是一个脚本——如果您初始化了某个东西并且它没有完成它的生命周期并且您没有以某种方式销毁它,它仍然可用。例如在你的 app.js:

try {
  const Firebase = require('firebase');
  Firebase.some.init.stuff();
} catch (e) { console.log(e); }

然后在你的行动中:

var result;
try {
  result = Firebase.usage();
} catch (e) { console.log(e); }

// and then pass result to your template