2017-10-19 1 views
0

Je fais un serveur très basique pour une application sur laquelle je travaille afin de m'aider à comprendre le nœud js et mongodb en tant que serveur pour mon application mobile. J'ai suivi un tutoriel et je l'ai eu en travaillant en postant des todos simples. Mais ce que je veux faire ensuite, c'est poster des images avec le texte dans la requête POST et les récupérer avec la requête GET comme JSON. Ci-dessous est le code que j'ai jusqu'ici qui affiche avec succès le nom de todo avec le créé à la date à la DB.Noeud JS & MongoDB - Publier et obtenir des images pour le serveur iOS api

La classe ci-dessous est ce que j'avais pour le schéma mais j'ai essayé d'ajouter comment je pensais qu'une image serait ajoutée, mais je ne pense pas que ce soit correct. Je crois que la pratique correcte serait de stocker les images dans un système de fichiers par exemple https://{mydomain}/images/ puis lors de la publication des données d'image, stocker l'image dans le dossier et l'URL de l'image dans la base de données?

todoListModel.js

'use strict'; 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 


var TaskSchema = new Schema({ 
    name: { 
    type: String, 
    required: 'Kindly enter the name of the task' 
    }, 
    img: { 
    data: Buffer, 
    contentType: String 
    }, 
    Created_date: { 
    type: Date, 
    default: Date.now 
    } 
}); 

module.exports = mongoose.model('Tasks', TaskSchema); 

todoListController.js

'use strict'; 


var mongoose = require('mongoose'), 
    Task = mongoose.model('Tasks'); 

exports.list_all_tasks = function(req, res) { 
    Task.find({}, function(err, task) { 
    if (err) 
     res.send(err); 
    res.json({ 
     data: { 
     task 
     } 
    }); 
    }); 
}; 




exports.create_a_task = function(req, res) { 
    var new_task = new Task(req.body); 
    new_task.save(function(err, task) { 
    if (err) 
     res.send(err); 
    res.json({ 
     data: { 
     task 
     } 
    }); 
    }); 
}; 


exports.read_a_task = function(req, res) { 
    Task.findById(req.params.taskId, function(err, task) { 
    if (err) 
     res.send(err); 
    res.json({ 
     data: { 
     task 
     } 
    }); 
    }); 
}; 


exports.update_a_task = function(req, res) { 
    Task.findOneAndUpdate({_id: req.params.taskId}, req.body, {new: true}, function(err, task) { 
    if (err) 
     res.send(err); 
    res.json({ 
     data: { 
     task 
     } 
    }); 
    }); 
}; 


exports.delete_a_task = function(req, res) { 


    Task.remove({ 
    _id: req.params.taskId 
    }, function(err, task) { 
    if (err) 
     res.send(err); 
    res.json({ message: 'Task successfully deleted' }); 
    }); 
}; 

todoListRoutes.js

'use strict'; 
module.exports = function(app) { 
    var todoList = require('../controllers/todoListController'); 

    // todoList Routes 
    app.route('/tasks') 
    .get(todoList.list_all_tasks) 
    .post(todoList.create_a_task); 


    app.route('/tasks/:taskId') 
    .get(todoList.read_a_task) 
    .put(todoList.update_a_task) 
    .delete(todoList.delete_a_task); 
}; 

server.js

var express = require('express'), 
    app = express(), 
    port = process.env.PORT || 3000, 
    mongoose = require('mongoose'), 
    Task = require('./api/models/todoListModel'), //created model loading here 
    bodyParser = require('body-parser'); 

// mongoose instance connection url connection 
mongoose.Promise = global.Promise; 
mongoose.connect('mongodb://localhost/Tododb'); 


app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 


var routes = require('./api/routes/todoListRoutes'); //importing route 
routes(app); //register the route 


app.listen(port); 


console.log('todo list RESTful API server started on: ' + port); 

Si quelqu'un pouvait faire la lumière sur ce sujet, il serait grandement apprécié.

Répondre

0

Je pense que ce serait la meilleure approche pour télécharger d'abord l'image dans votre dossier de projet ou vous pouvez télécharger l'image dans le compartiment AWS S3 si vous utilisez, puis stocker le chemin de cette image dans votre collection. schéma correct serait

var TaskSchema = new Schema({ 
name: { 
    type: String, 
    required: 'Kindly enter the name of the task' 
}, 
img: { 
    type: String, 
}, 
Created_date: { 
    type: Date, 
    default: Date.now 
} 
}); 
+0

Est-ce que cela signifie que je dois enregistrer l'image avec un nom unique au dossier dans la demande de poste et puis quand il est enregistré, mettre l'URL de l'image dans la base de données une fois qu'il est enregistré ? Si oui, avez-vous un échantillon de la façon dont cela serait fait? –

+0

Référez-vous à ce http://blog.robertonodi.me/simple-image-upload-with-express pour télécharger l'image dans expressjs. –

+0

Référez-vous à https://github.com/hawksaggs/image_upload J'ai fait naïf projet de type Wesite de réseautage social –