如何从我的 Angular 前端服务中查询用户?

Posted

技术标签:

【中文标题】如何从我的 Angular 前端服务中查询用户?【英文标题】:How can I query a User from my Angular front-end service? 【发布时间】:2017-10-19 09:28:22 【问题描述】:

问题:

我正在尝试在我的前端 Angular 2 服务中查询当前登录的用户:

 UserModel.findById(userID, function (err, user) 

从浏览器看来这种行为是可能的,我如何从我的服务中查询用户?


错误:

使用 webpack 运行 npm run build 然后 npm start:

user.js?b9cb:19 Uncaught TypeError: mongoose.model is not a function

哪个带我去网上搜索错误的意思,有效发现mongoose不支持来自客户端的查询?

https://github.com/Automattic/mongoose/issues/4779


代码:

模型/用户

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var mongooseUniqueValidator = require('mongoose-unique-validator');

var schema = new Schema(
    firstName: type: String, required: true,
    lastName: type: String, required: true,
    password: type: String, required: true,
    email: type: String, required: true, unique: true,
    polls: [type: Schema.Types.ObjectId, ref: 'Poll'],
    votes: [
      poll: type: Schema.Types.ObjectId, ref: 'Poll',
      choice: type: Number,
    ],
);

schema.plugin(mongooseUniqueValidator);

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

client.service

var UserModel = require('../../../models/user');

voted(poll: Poll, userID: string, choice: number) 
          UserModel.findById(userID, function (err, user) 
            var result = "";
            for (var i = 0; i < user.votes.length; i ++) 
              if (user.votes[i].poll == poll.pollId) 
                result = "disabled";
                if (user.votes[i].choice == choice) 
                  result =  "selected";
                
              
            
            return result;
          )
        

【问题讨论】:

您是在尝试在电子等某种类型的环境中运行您的 Angular 应用程序,还是在浏览器中运行?如果是后者,那么我建议您实际阅读您引用的“问题”,因为这在浏览器中不起作用。如果你想问“我如何从浏览器访问 MongoDB”,那么不要。而是在您最喜欢的搜索引擎中输入该短语并开始阅读结果。 为什么投反对票,请解释。如有必要,我愿意修改我的问题:) @NeilLunn 我知道。这就是为什么我在这里问一个问题:D 我想知道如何从我的服务中查询我的用户,因为我目前的实现无法从浏览器中查询。 为了记录,这不是我的反对意见。但我认为我所说的解释了为什么有人投反对票。即有大量关于“我如何从浏览器使用”问题的信息,因为您不是第一个提出问题的人。 @NeilLunn 我应该更清楚一点,我知道我无法从浏览器查询 MongoDB,我只是在问我可以做些什么来从我的服务中查询我的用户。 【参考方案1】:

检查 Angular2 的 http 模块以发出请求。这是一个 GET 请求,但如果您愿意,我相信您可以提出所有其他请求。

import  Component  from '@angular/core';
import  Http  from '@angular/http';

@Component(
  selector: 'http-app',
  templateUrl: 'your-template.html'
)
class YourComponent 
  constructor(http: Http) 
    http.get('your-endpoint')
      .map(response => response.json())
      .subscribe(json => this.json = json);
  

【讨论】:

我在服务中使用它,而不是组件:D 即使在服务中,您仍然可以使用相同的 http.get(endpoint) 方法

以上是关于如何从我的 Angular 前端服务中查询用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AngularFirebase 和 Angular 7 从用户集合中获取用户数据

如何使用 Angular Ionic 从我的 Firebase 实时数据库中获取一项

Spring Security JWT - 通过授权标头的邮递员身份验证有效,但从我的 Angular 前端不起作用

自定义 API 函数

如何保护Redis&Socket.IO实时服务器,以便只有经过身份验证的用户才能收听?

如何在 Spring Security 无状态(jwt 令牌)中注销用户?