Project Objectives
Tech and Open Source
As I continue to study the MEAN.JS framework, I wanted to develop an app that would help cement what I've learned, illustrate some of the points I got hung up on and try to define problems well enough that I can try to get some more help where needed.
One of my objectives with migrating data out of Drupal and into a MEAN stack app is for easier management of downstream requests for JSON data. We want to take advantage of the built in functionality of the MeanJS stack, and here's a simple exaple.
In this use case we wish to expose articles to some other app who will make a HTTP GET request for all the articles or just one.
In app/controllers/articles.server.routes.js, we need to add entries for the two functions we'll allow via GET.
app.route('/api/articles')
.get(articles.list);
Created a norcal.cities.geojson file via geojson.io site.
In this tutorial we will load a small data set into MongoDB and build a simple map that adds a marker to a map. There is some preparation for this tutorial, so you will need the following:
- a working MeanJS environment
- created an Article in your working environment
- be prepared to do some find / replace in the GeoJSON data file attached to this tutorial
- be able to run commands from the terminal to load data into MongoDB via mongoimport and install angular-leaflet-directive
Well, I'm no expert but here's a tip that might save you some time. I have a Drupal databae outputting valid GeoJSON data. Our data looks like this:
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-122.0570486784,
36.99607280576
]
},
"properties": {
"name": "Dean of Students Office",
"description": null,
"Food Type": "",
I took some time to try MeanIO over the past few days. While I ended up coming back to MeanJS, I drew some conclusions that might be helpful.
Here's the use case. I wanted to take a GeoJSON file, load it into a boilerplate MEAN stack, generate CRUD files and get a basic app tested. Ideally, I'd want to tweak the layouts, menus, and boilerplate HTML as well as use bower to add js libs that add functionality.
Update 5/1/15 - On a different instance of Mongo, I had run the command noted below and got errors. However, this worked:
mongoimport --db mean-dev -c points --file "points.geojson" --jsonArray
Let me save you the hours lost in trying to figure out getting GeoJSON features into individual documents in a collection versus one document with nested features.
MongoDB 3.0.2. Valid GeoJSON file full of 809 features.
Using this code:
mongoimport --db test --type json --file ./'mobilemaps.geojson'
One thing that has been frustrating me in learning the MEAN stack has been how to extend the basic Article example (or a CRUD created module) beyond the basic data model. While you're trying to learn AngularJS and Mongoose/MongoDB interactions, you can find lots of literature on modelling, but little on how to modify your core CRUD views, model and controllers to work together. I'm sure that there may/are better and more elegant ways to accomplish this.
Importing to Mongo via jsonArray
mongoimport -d meanjs-leaflet4-dev -c leaflets -f name,coordinates --type json --file building-addresses.json --jsonArray
// sample file
// notes - coordinates needs to be bracketed to indicate an array otherwise we get string
// created - use a yyyy-mm-dd for basic entry
[
{
"name": "Cowell College - Apartment 2",
Over the past week, in between meetings, I've gotten some additional functionality added. I've been able to enter a number of Leaflet nodes (records) and then display markers on the "list" view. I've created a link in the popup that then takes us to the detail record. I've also been taking Dan Whalin's Udemy course. His site has a 50% off coupon code.