2017-10-19 12 views
0

私はモバイルアプリケーションのサーバーとしてノードjとmongodbを理解するのに役立つ非常に基本的なサーバーを使っています。私はチュートリアルに従い、簡単なtodosを投稿するようにしました。しかし、私が次にやりたいことは、POSTリクエスト内のテキストと共に画像をポストし、GETリクエストでJSONとして取得することです。以下は、私がこれまでに行ったコードで、作成日時と一緒にtodo名をdbに正常に投稿します。ノードJS&MongoDB - iOSサーバー用の画像を投稿して取得するapi

以下のクラスは私がスキーマのために持っていたものですが、画像を追加する方法を追加しようとしましたが、これは正しいとは思わないです。私は正確な練習はファイルシステムに画像を格納することだと信じて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

expressjsで画像をアップロードするには、http://blog.robertonodi.me/simple-image-upload-with-expressを参照してください。 –

+0

このhttps://github.com/hawksaggs/image_uploadを参照してください私は素朴なソーシャルネットワーキングwesiteタイプのプロジェクトを作った –

関連する問題