MEAN堆栈应用程序 - 获取单个用户的详细信息,通过用户名查询

时间:2017-03-16 04:52:13

标签: node.js mongodb express mean-stack

我使用NodeJS和Express为GET和POST值构建了一个API到数据库(MongoDB)。

我能够获得存储在我的数据库中的用户总数(localhost:3000 / user)

但我希望通过输入userID或userName(localhost:3000 / user /:username)(localhost:3000 / user /:userID)来获取单个用户详细信息

我可以通过ObjectID获取单个用户详细信息(localhost:3000 / user /:id)

App.js

    var express = require('express');
    var path = require('path');
    var favicon = require('serve-favicon');
    var logger = require('morgan');
    var cookieParser = require('cookie-parser');
    var bodyParser = require('body-parser');

    //var routes = require('./routes/index');
    //var users = require('./routes/users');

    //Router for developers
    var developer = require('./routes/developer');

    //Router for TvShows
    var tvshow = require('./routes/tvshow');

    //Router for TvShows
    var user = require('./routes/user');

    //Router for TvShowRating
    var tvshowrating = require('./routes/tvshowrating');

    //Router for TvShowEpisodes
    var tvshowepisodes = require('./routes/tvshowepisodes');

    //Router for TvShowNewsFeed
    var tvshownewsfeed = require('./routes/tvshownewsfeed');

    //Router for TvShowSeason
    var tvshowseason = require('./routes/tvshowseason');

    //Router for TvShowRatingUser
    var tvshowratinguser = require('./routes/tvshowratinguser');


    // load mongoose package
    var mongoose = require('mongoose');

    // Use native Node promises
    mongoose.Promise = global.Promise;

    // connect to MongoDB

    //mongoose.connect('<string>')
    //mongoose.connect('mongodb://localhost/televisionary-api')
      .then(() =>  console.log('connection succesful'))
      .catch((err) => console.error(err));

    var app = express();

    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'ejs');

    // uncomment after placing your favicon in /public
    //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
    app.use(logger('dev'));
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));

    //Registering routers
    app.use('/developer', developer);
    app.use('/tvshow', tvshow);
    app.use('/user', user);
    app.use('/tvshowrating', tvshowrating)
    app.use('/tvshowepisodes', tvshowepisodes)
    app.use('/tvshownewsfeed', tvshownewsfeed)
    app.use('/tvshowseason', tvshowseason)
    app.use('/tvshowratinguser', tvshowratinguser)

    // catch 404 and forward to error handler
    app.use(function(req, res, next) {
      var err = new Error('Not Found');
      err.status = 404;
      next(err);
    });

    // error handlers

    // development error handler
    // will print stacktrace
    if (app.get('env') === 'development') {
      app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
          message: err.message,
          error: err
        });
      });
    }

    // production error handler
    // no stacktraces leaked to user
    app.use(function(err, req, res, next) {
      res.status(err.status || 500);
      res.render('error', {
        message: err.message,
        error: {}
      });
    });


    module.exports = app;

。路由/ user.js的

    var express = require('express');
    var router = express.Router();

    var User = require('../models/User.js');

    /* GET /user listing. */
    router.get('/', function(req, res, next) {
      User.find(function (err, user) {
        if (err) return next(err);
        res.json(user);
      });
    });

    /* POST /user */
    router.post('/', function(req, res, next) {
      User.create(req.body, function (err, post) {
        if (err) return next(err);
        res.json(post);
      });
    });

    /* GET /user/id */
    router.get('/:id', function(req, res, next) {
      User.findById(req.params.id, function (err, post) {
        if (err) return next(err);
        res.json(post);
      });
    });

    /* PUT /user/:id */
    router.put('/:id', function(req, res, next) {
      User.findByIdAndUpdate(req.params.id, req.body, function (err, post) {
        if (err) return next(err);
        res.json(post);
      });
    });

    /* DELETE /user/:id */
    router.delete('/:id', function(req, res, next) {
      User.findByIdAndRemove(req.params.id, req.body, function (err, post) {
        if (err) return next(err);
        res.json(post);
      });
    });

    module.exports = router;

。模型/ user.js的

    var mongoose = require('mongoose');

    var userSchema = new mongoose.Schema({
        userId:Number,
        userName: String,
        userEmail: String,
        userPassword: String,
        userCreatedDateTime: Date,
        userWatchList: [
            {
                watchListItemId:Number,
                tvShowId: Number,
                tvShowSeasonId: Number,
                tvShowEpisodeId: Number,
                tvShowAddedDateTime: Date
            }
        ],
        userFavouriteList: [
            {
                favouriteId:Number,
                tvShowId: Number,
                tvShowFavouritedDateTime: Date

            }
        ],
        userRatings: [
            {
                tvShowUserRatingId:Number,
                tvShowId: Number,
                tvShowSeasonId: Number,
                tvShowEpisodeId: Number,
                tvShowRatedDateTime: Date,
                tvShowRating: Number,
                tvShowUserTags:[String]

            }
        ]
    });

    module.exports = mongoose.model('User', userSchema);

2 个答案:

答案 0 :(得分:1)

如果您想通过在一个服务中输入用户名或用户ID来获取用户详细信息,请使用以下命令修改您的服务:

  router.get('/:keyword', function(req, res, next){
     User.findOne({$or:[{userName: req.params.keyword}{userId:req.params.keyword}]},
         function (err, post) {
                    if (err) return next(err);
                    res.json(post);
                  });
                });

答案 1 :(得分:0)

您可以使用findOne方法从数据库中获取特定用户。

router.get('/user/:username', function(req, res, next) {
  User.findOne({userName: req.params.username}, function(err, user) {
         if(err)
           console.log(err);
         else
           //do something with user
    })
});

使用userId获取用户时相同。