2017-10-19 73 views
0

我正在爲應用程序開發一個非常基本的服務器,以幫助我理解節點js和mongodb作爲我的移動應用程序的服務器。我遵循教程,併發布了簡單的待辦事項。但是我接下來要做的是在POST請求中發佈圖像和文本,並以GET請求作爲JSON檢索它們。以下是我迄今爲止已成功發佈待辦事項名稱以及創建日期至數據庫的代碼。Node JS&MongoDB - 爲iOS服務器api發佈和獲取圖像

下面的類是我爲Schema所做的,但我試圖添加我如何添加圖像的方式,但我認爲這不正確。我相信正確的做法是將圖像存儲在文件系統中,例如https://{mydomain}/images/,然後發佈圖像數據時,將圖像存儲在文件夾中,並將url存儲到數據庫中的圖像中?

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); 

如果有人可以對此有所瞭解,將不勝感激。

回答

0

我認爲這是最好的辦法先上傳圖片到你的項目文件夾中,也可以,如果你使用的是上傳AWS S3存儲桶的圖像,然後將該圖片的路徑存儲到您的收藏。 正確的模式將是

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

這是否意味着我需要將圖像與唯一的名稱保存到文件夾中的POST請求,然後當它被保存,把圖像的URL數據庫,一旦它被保存?如果是這樣,你有一個樣本,如何做到這一點? –

+0

請參閱http://blog.robertonodi.me/simple-image-upload-with-express以expressjs上傳圖片。 –

+0

請參考https://github.com/hawksaggs/image_upload我做了天真的社交網絡wesite類型的項目 –