ExpressJS链接到更新内容

时间:2015-01-06 02:18:41

标签: javascript html express put

我正在尝试通过我的编辑器更新我的内容,但我想知道我应该修改哪些应用程序以便能够执行此操作。我有一种感觉,它是通过路径文件,但想知道我是否应该在我的视图中使用超链接方法,以便能够使用我想要编辑的内容生成我的视图。

这是我的路线档案:

var express = require('express');
var router = express.Router();
var passport = require('passport');
var blogDB = require('../config/blogDB.js');
var Blogpost = require('./models/blogModel.js');
var paginate = require('express-paginate');
var http = require('http');
var path = require('path');
var aws = require('aws-sdk');

var AWS_ACCESS_KEY = process.env.AWS_ACCESS_KEY;
var AWS_SECRET_KEY = process.env.AWS_SECRET_KEY;
var S3_BUCKET = process.env.S3_BUCKET;

//index 
router.use(paginate.middleware(10, 50));




    router.route('/') 


        // START GET method
        .get(function(req, res, next) {

            Blogpost.paginate({}, req.query.page, req.query.limit, function(err, pageCount, blogpost, itemCount) {




                if (err) return next(err)

                        if (err)
                            res.send(err);




                        res.format({
                            html: function() {
                                res.render('pages/index', {
                                    blogpost: blogpost,
                                    pageCount: pageCount,
                                    itemCount: itemCount
                                })
                            },
                            json: function() {

                                res.json({
                                    object: 'blogpost',
                                    has_more: paginate.hasNextPages(req)(pageCount),
                                    data: blogpost
                                })
                            }
                        }); // END res.format(html, json)
            }, {sortBy: {'date': -1} } ); // END Blogpost.paginate
        }); // END GET method


router.get('/sign_s3', function(req, res){
  aws.config.update({accessKeyId: AWS_ACCESS_KEY, secretAccessKey: AWS_SECRET_KEY });
  var s3 = new aws.S3();
    var s3_params = {
        Bucket: S3_BUCKET,
        Key: req.query.s3_object_name,
        Expires: 60,
        ContentType: req.query.s3_object_type,
        ACL: 'public-read'
    };
    s3.getSignedUrl('putObject', s3_params, function(err, data){
        if(err){
            console.log(err);
        }
        else{
            var return_data = {
                signed_request: data,
                url: 'https://'+S3_BUCKET+'.s3.amazonaws.com/'+req.query.s3_object_name
            };
            res.write(JSON.stringify(return_data));
            res.end();
        }
    });
});





router.route('/admin/posts/create')

    // START POST method
        .post(function(req, res) {

            console.log("New instance");

            var blogpost = new Blogpost(); // create a new instance of a Blogpost model

            blogpost.title = req.body.title; // set the blog title
            blogpost.featureImage = req.body.featureImage; // set the blog image
            blogpost.blogUrl = blogpost.title.toLowerCase().replace(/\s+/g,"-");
            blogpost.author = req.body.author; // set the author name
            blogpost.tagline = req.body.tagline; // set the tagline
            blogpost.content = req.body.content; // set the blog content
            blogpost.category = req.body.category; // set the category
            blogpost.tags = req.body.tags; // set the tags
                //Save Blog Post
                blogpost.save(function(err) {
                    if (err)
                        res.send(err);

                    res.redirect(303, '/'); //NEEDS TO BE CHANGED
                });

        }) // END POST method


        .get(isLoggedIn, function(req, res) {
            res.render('pages/blogpost-create');
        });

function getSearchCriteria(params) {
      return {
          blogUrl: params.blogpost_blogUrl
      };
}



router.route('/blog/:blogpost_blogUrl')

    .get(function (req, res) {
         var searchCriteria = getSearchCriteria(req.params);
         Blogpost.findOne(searchCriteria, function (err, blogpost) {
             if (err)
                 res.send(err);
             res.render('pages/blogpost', {
                 blogpost: blogpost
             })
         })
     })
     .put(function (req, res) {
         var searchCriteria = getSearchCriteria(req.params);
         var updated = getBlogpostUpdate(req.body)
         Blogpost.findOneAndUpdate(searchCriteria, updated, function (err, updated) {
             if (err)
                 res.send(err);


             res.json({ message: 'Blog updated.' });
         });
     })
     .delete(function (req, res) {
         var searchCriteria = getSearchCriteria(req.params);
         Blogpost.findOneAndRemove(searchCriteria, function (err, removed) {
             if (err)
                res.send(err);

             res.json({ message: 'Successfully deleted' });
         });
     });

//about
    router.get('/about', function(req, res) {
            res.render('pages/about');
    });

//resume
    router.get('/resume', function(req, res) {
            res.render('pages/resume');
    });

//portfolio
    router.get('/portfolio', function(req, res) {
            res.render('pages/portfolio');
    });    



//login
    router.route('/login')

    .get(function(req, res) {
        res.render('pages/login.ejs', {
            message: req.flash('loginMessage')
        });
    })

    .post(passport.authenticate('local-login', {
        successRedirect : '/admin',
        failureRedirect : '/login',
        failurFlash : true
    }));

//sign up
/*
    router.route('/signup')


    .get(function(req, res) {
        res.render('pages/signup.ejs', {
            message: req.flash('signupMEssage')
        });
    })

    .post(passport.authenticate('local-signup', {
        successRedirect : '/admin',
        failureRedirect : '/signup',
        failurFlash : true
    }));
*/

//admin dashboard
    router.get('/admin', isLoggedIn, function(req, res, next) {
        Blogpost.paginate({}, req.query.page, req.query.limit, function(err, pageCount, blogpost, itemCount) {
            if (err) return next(err)
              if (err)
                res.send(err);

              res.format({
                            html: function() {
                                res.render('pages/admin', {
                                    user: req.user,
                                    blogpost: blogpost,
                                    pageCount: pageCount,
                                    itemCount: itemCount
                                })
                            },
                            json: function() {

                                res.json({
                                    object: 'blogpost',
                                    has_more: paginate.hasNextPages(req)(pageCount),
                                    data: blogpost
                                })
                            }
                        }); // END res.format(html, json)
            }, {sortBy: {'date': -1} } ); // END Blogpost.paginate
    });

//logout

    router.get('/logout', function(req, res) {
        req.logout();
        res.redirect('/');
    });

//middleware to make sure user is logged in
// route middleware to make sure
function isLoggedIn(req, res, next) {

    // if user is authenticated in the session, carry on
    if (req.isAuthenticated())
        return next();

    // if they aren't redirect them to the home page
    res.redirect('/');
}


module.exports = router;

Blogpost.ejs(我正在尝试创建一个链接来编辑帖子):

<!doctype html>
<html>
<head>
    <title>Node Authentication</title>
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css">
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css">
</head>
<body>
<div class="container">

    <div class="page-header">
        <h1>Admin</h1>
        <h2>Welcome user <%= user.local.email %></h2>
        <a href="/logout" class="btn btn-default btn-sm">Logout</a>
    </div>

    <div class="row">

        <!-- LOCAL INFORMATION -->
        <div class="col-sm-6">
            <h3><a href="/admin/posts/create" class="btn btn-primary btn-lg btn-success ">New Post</a></h3>
            <div class="well">
                <h3><span class="fa fa-user"></span> Local</h3>
                <p>
                    <strong>id</strong>: <%= user._id %><br>
                    <strong>email</strong>: <%= user.local.email %><br>

                </p>
            </div>
            <h3><u>Published Blogposts</u></h3>
            <% blogpost.forEach(function(blogpost) { %>
            <h4><%= blogpost.title %>&nbsp;<a href="#" class="btn btn-primary btn-sm btn-warning">Edit</a></h4>

            <% }); %>
        </div>

    </div>

</div>
</body>
</html>

0 个答案:

没有答案