繁体   English   中英

从mongodb下载Node.js Express

[英]Node.js express download from mongodb

我想编写一个rest api,通过它我可以下载一些数据。 所有数据都存储在mongodb中。 我不知道将什么传递给download方法,以使其成为可能。

这是我当前的代码:

router.get('/download/:productId/:username/:token', function (req, res) {

    var auth = require('../provider/authProvider.js');
    var authInst = new auth();

    authInst.checkAuth(req.params.username, req.params.token, res, function (err, obj) {
        if (obj == true) {
            res.status(200);
            // here is my problem, what to pass to the download-method
            res.download('');
        }
    });        
});

除了将路径传递到download方法之外,我找不到其他任何东西。

有没有人有一个想法如何解决我的问题?

我假设您知道如何设置mongoose环境,进行配置,连接到MongoDB。 如果没有,请参阅我的答案在这里

现在假设我们在MongoDB中有一个文档作为Blog。 因此,我们需要为Blog创建一个模型,以便可以使用Mongoose ORM进行CRUD操作。

您需要将猫鼬模块包含在您的项目中。

因此,从您的项目根目录运行此命令,它将自动为您下载猫鼬。 npm安装猫鼬--save

BlogModel.js

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var BlogSchema = new Schema({
    "title"   : { type: String },
    "user_id" : { type: String },
    "blog_uri" :{ type: String },
    "post_date" : { type : Date, default: Date.now},
    "body" : { type: String, default: '' },
    "comments" : [
                    { 'content'  : { type: String },
                      'user_id'  : { type: String },
                      'comment_date'     : { type: Date },
                      'votes'    : [
                                    {
                                    'user_id' : { type: String }
                                    }
                                   ] 
                    }
                ],
    "hidden" : {type:Boolean, default: false }
});

mongoose.model('Blog', BlogSchema);

因此,让我们创建一个名为BlogController.js的单独文件,在其中我们将为CRUD编写方法。

var mongoose = require('mongoose');
var Blog = mongoose.model('Blog');
var ObjectId = require('mongoose').Types.ObjectId;
exports.create = function(req,res){
    var blog = new Blog(req.body);

    blog.save(function(err){
        if(err)
            res.json({message: "Error occured while saving"});
        else{
            res.redirect('/home');
        }    
    });
};

exports.getAll = function(req,res){
    Blog.find(function(err,blogs){
        if(err){
            res.send(err);
        }else{
            res.json(blogs);
        }
    });
};


exports.get = function(req,res){
    var id ;
    try{
        id = new ObjectId(req.params.id);
        Blog.findById(id,function(err,blog){
            if(err){
                res.send(err);
            }else{
                res.render('blog.ejs', {
                    blog: blog
               });
          }
        });
    }catch(e){
        res.send(404);
    }
};


exports.update = function(req,res){
    var id ;
    try{
        id = new ObjectId(req.params.blog_id);
        Blog.findById(id,function(err,blog){
            if(err){
                res.send(err);
            }

            blog.save(function(err){
                if(err)
                    res.send(err);
                 res.render('blog.ejs', {
                    message: "Blog Updated successfully"
                });
            });
        });
    }catch(e){
        res.send(404);
    }
};

exports.delete = function(req,res){
    var id ;
    try{
        id = new ObjectId(req.params.blog_id);
        Blog.remove({_id:id},function(err,blog){
            if(err){
                res.send(err);
            }
               res.render('blog.ejs', {
                    message: "Blog deleted successfully"
                });
        });
    }catch(e){
        res.send(404);
    } 
};

所以这是关于使用猫鼬的CRUD。 我通常不在项目中使用res.render(..),因为我将模板逻辑放在前端。 我只是使用res.json(..)并将json数据传递到前端。 因此,请继续尝试。 我希望我回答了你的问题。 您可以参考仓库,以获取更好的示例。 在这里,我得到了一个非常干净的CRUD实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM