简体   繁体   English

使用 Node Express 4 MongoDB 上传和检索图像

[英]Image upload and retrieve using Node Express 4 MongoDB

I have created a simple login and signup using MEAN stack languages.我使用 MEAN 堆栈语言创建了一个简单的登录和注册。 I have a profile page where user can edit his info like name, address, etc. I am able to store and retrieve input type "text" fields.我有一个个人资料页面,用户可以在其中编辑他的信息,如姓名、地址等。我能够存储和检索输入类型“文本”字段。 How can i add image upload feature and retrieve uploaded images?如何添加图片上传功能并检索上传的图片? Im new to mean stack so can anyone please help me?我是新来的意思堆栈所以有人可以帮助我吗? Thanks.谢谢。

My server.js is this我的 server.js 是这个

require('rootpath')();
var express = require('express');
var app = express();
var session = require('express-session');
var bodyParser = require('body-parser');
var expressJwt = require('express-jwt');
var config = require('config.json');

app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(session({ secret: config.secret, resave: false, saveUninitialized: true }));

// use JWT auth to secure the api
app.use('/api', expressJwt({ secret: config.secret }).unless({ path: ['/api/users/authenticate', '/api/users/register'] }));

// routes
app.use('/login', require('./controllers/login.controller'));
app.use('/register', require('./controllers/register.controller'));
app.use('/app', require('./controllers/app.controller'));
app.use('/api/users', require('./controllers/api/users.controller'));


// make '/app' default route
app.get('/', function (req, res) {
    return res.redirect('/app');
});

// start server
var server = app.listen(3000, function () {
    console.log('Server listening at http://' + server.address().address + ':' + server.address().port);
});

HTML to save and view saved data looks like this用于保存和查看保存数据的 HTML 如下所示

    <h1>My Account</h1>
    <div class="form-container">
        <form method="post" >
            <div class="form-group">
                <label for="firstName">First name</label>
                <input type="text" id="firstName" class="form-control" ng-model="vm.user.firstName" required />
            </div>
            <div class="form-group">
                <label for="lastName">Last name</label>
                <input type="text" id="lastName" class="form-control" ng-model="vm.user.lastName" required />
            </div>
            <div class="form-group">
                <label for="username">Username</label>
                <input type="text" id="username" class="form-control" ng-model="vm.user.username" required />
            </div>
            <div class="form-group">
                <label for="password">Password</label>
                <input type="password" id="password" class="form-control" ng-model="vm.user.password" />
            </div>
            <div class="form-group">
                <label for="address">Address</label>
                <input type="text" id="password" class="form-control" ng-model="vm.user.address" />
            </div>  
            <div class="form-group">
                <button class="btn btn-primary" ng-click="vm.saveUser()">Save</button>
                <button class="btn btn-danger" ng-click="vm.deleteUser()">Delete</button>
            </div>
        </form>
    </div>
<!-- View Data -->
    <div class="col-md-12">
        <h1>Hi {{vm.user.firstName}}!!</h1>
        <p><strong>User Name :</strong> {{vm.user.username}} </p>
        <p><strong>Full Name : </strong> {{vm.user.firstName}} {{ vm.user.lastName}}</p>
        <p><strong> Your address is : </strong> {{vm.user.address}}</p>
    </div>

and app.js looks like this和 app.js 看起来像这样

(function () {
    'use strict';

    angular
        .module('app')
        .controller('Account.IndexController', Controller);

    function Controller($window, UserService, FlashService) {
        var vm = this;

        vm.user = null;
        vm.saveUser = saveUser;
        vm.deleteUser = deleteUser;

        initController();

        function initController() {
            // get current user
            UserService.GetCurrent().then(function (user) {
                vm.user = user;
            });
        }

        function saveUser() {
            UserService.Update(vm.user)
                .then(function () {
                    FlashService.Success('User updated');
                })
                .catch(function (error) {
                    FlashService.Error(error);
                });
        }

        function deleteUser() {
            UserService.Delete(vm.user._id)
                .then(function () {
                    // log user out
                    $window.location = '/login';
                })
                .catch(function (error) {
                    FlashService.Error(error);
                });
        }
    }

})();

and user.service.js which is used to update data to db is和用于将数据更新到数据库的 user.service.js 是

function updateUser() {
    // fields to update
    var set = {
        firstName: userParam.firstName,
        lastName: userParam.lastName,
        username: userParam.username,
        address: userParam.address,
    };

    // update password if it was entered
    if (userParam.password) {
        set.hash = bcrypt.hashSync(userParam.password, 10);
    }

    db.users.update(
        { _id: mongo.helper.toObjectID(_id) },
        { $set: set },
        function (err, doc) {
            if (err) deferred.reject(err.name + ': ' + err.message);

            deferred.resolve();
        });
}

To build the image upload feature, You need to add functionality to both the frontend and backend.要构建图像上传功能,您需要向前端和后端添加功能。

You need to have a custom image upload directive or component in the angularjs and Some kind of upload handler package in the Express Server as well.您需要在 angularjs 和 Express Server 中的某种上传处理程序包中有一个自定义图像上传指令或组件。

Keeping all this in mind, Google will surely lead you to best package available for you.牢记这一切,Google 一定会引导您找到最适合您的软件包。

One code sample can be found here : https://gist.github.com/keithics/bf0e13feaee5631fa936b7b203029cd4可以在此处找到一个代码示例: https : //gist.github.com/keithics/bf0e13feaee5631fa936b7b203029cd4

Other: https://github.com/nervgh/angular-file-upload其他: https : //github.com/nervgh/angular-file-upload

There are huge number of libraries available for the same.有大量可用的库。

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

相关问题 如何使用node js将图片上传并保存到mongodb - How to upload and save image to mongodb using node js Angular-Node Express-大图片上传问题 - Angular - Node Express - Large image upload issue 使用Node.js(express),Angular和MongoDB进行PUT请求时遇到问题 - Trouble with PUT request using Node.js (express), Angular, and MongoDB 如何使用nodejs将图像上传到文件夹并将路径保存到mongodb? - how to upload the image to folder using nodejs and save the path into mongodb? 在MEAN Stack应用程序中使用mongoose在mongodb上上载和检索text / pdf / img文件 - Upload and retrieve text/pdf/img files on mongodb using mongoose in a MEAN stack application node.js使用multer上传图像显示undefined - node.js to upload image using multer shows undefined 如何将node,express,mongodb与angularjs结合在一起? - How to combine node,express,mongodb with angularjs? 如何使用Node.js Express后端正确处理文件上传? - How to properly handle files upload using Node.js Express backend? 如何使用angular-file-upload在Node.js Express应用程序中上传文件 - How to get uploaded file in Node.js Express app using angular-file-upload 如何使用ng-file-upload在express js中保存文件图像 - How to save file image in express js using ng-file-upload
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM