Node.js 如何使用Node js和Ionic 2根据特定字段从mongo db中获取数据

Node.js 如何使用Node js和Ionic 2根据特定字段从mongo db中获取数据,node.js,mongodb,ionic2,Node.js,Mongodb,Ionic2,我正在使用NodeJS和MongoDb以及Ionic 2。我正在尝试根据emailID检索用户的详细信息,我希望传递所需的emailID并获取详细信息 这是我的Server.js // set up ====================================================================== var express = require('express'); var path = require('path'); var logger = requ

我正在使用NodeJS和MongoDb以及Ionic 2。我正在尝试根据emailID检索用户的详细信息,我希望传递所需的emailID并获取详细信息

这是我的Server.js

// set up ======================================================================
var express = require('express');
var path = require('path');
var logger = require('morgan');
var bodyParser = require('body-parser');
var app = express();
var server = require('http').Server(app);
var mongoose = require('mongoose');                 // mongoose for mongodb
var port = process.env.PORT || 8000;                // set the port
var database = require('./config/database');            // load the database config
var morgan = require('morgan');
var methodOverride = require('method-override');
var io = require('socket.io')(server);
var cors = require('cors');
var messageId = {};

// configuration ===============================================================
// Connect to DB
mongoose.connect(database.remoteUrl)
mongoose.connection.on('error', function(e) {
    console.log('Can not connect Error:>>',e);
    process.exit();
});
mongoose.connection.once('open', function(d) { 
    console.log("Successfully connected to the database");
})
//app.use(express.static('./public'));      // set the static files location /public/img will be /img for users
app.use(morgan('dev')); // log every request to the console
app.use(bodyParser.urlencoded({'extended': 'true'})); // parse application/x-www-form-urlencoded
app.use(bodyParser.json()); // parse application/json
app.use(bodyParser.json({type: 'application/vnd.api+json'})); // parse application/vnd.api+json as json
app.use(methodOverride('X-HTTP-Method-Override')); // override with the X-HTTP-Method-Override header in the request
app.use(bodyParser.urlencoded({extended:true}))
app.use(bodyParser.json())
app.use(cors());
app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header('Access-Control-Allow-Methods', 'DELETE, PUT');
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
 });

io.set('origins', '*:*');
http = require('http'),
server = http.createServer(function (req, res) {
    //res.writeHead(200,{'content-type':'text/plain'});
    //  res.write("Sever On");
    // res.end();
}),
io = io.listen(server);
io.on('connection', function (socket) {
    console.log('User Connected -- Server Online');   
    socket.on('message', function (msg,msgId) {
        io.emit('message', "Hello");
        console.log("message from client:", msg);
         setInterval(function(){
          io.emit("messageStatus",msgId);
      },500)
   });
});

app.use(require('./app/routes.js'));
app.listen(port);
//server.listen(port);
console.log("App listening on port " + port);
我当前正在本地主机上运行服务器:8000

这是我的config/database.js,我正在使用AWS来托管我的MongoDB

module.exports = {
    remoteUrl : 'mongodb://username:password@ec2-22-127-21-183.ap-south-1.compute.amazonaws.com:27017/testdb'

};
我基于我的MongoDB创建了一个模式,命名为userprofile.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ProfileSchema = new Schema({
    id:{
        type:String,
        required:true
    },
    FirstName:{
        type:String,
        required:true
    },
    LastName:{
        type:String,
        required:true
    },
    EmailID:{
        type:String,
        required:true
    },
    Phone:{
        type:Number,
        required:true
    },
    Address1:{
        type:String,
        required:true
    },
    Address2:{
        type:String,
        required:true
    },
    PinCode:{
        type:Number,
        required:true
    },
    Gender:{
        type:String,
        required:true
    },
    ProfilePic:{
        type:String,
        required:true
    },
    IDproof:{
        type:String,
        required:true
    },
    UserName:{
        type:String,
        required:true
    },
    Password:{
        type:String,
        required:true
    },
    Dob:{
        type:Number,
        required:true
    },
    City:{
        type:String,
        required:true
    },
    State:{
        type:String,
        required:true
    },
    HighestEducation:{
        type:String,
        required:true
    }
})
module.exports = mongoose.model('UserProfile',ProfileSchema,'User');
这是我的路线

var express = require('express')
var app = module.exports = express.Router();
var UserProfile = require('./models/UserProfile');


app.get('/User', function (req, res) {
    UserProfile.find(function (err, profile) {
        // if there is an error retrieving, send the error. nothing after res.send(err) will execute
        if (err) {
           return res.json({"success":false,"msg":err})
           console.log(err);
        }
        res.status(200).send({"success":true,"result":profile}) 
   });
});
在Ionic 2中,我创建了一个名为Profile.ts的提供者

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import { Config } from 'ionic-angular/config/config';
import { Response } from '@angular/http/src/static_response';    

 const CONFIG = {apiUrl:'mongodb://username:password@ec2-12-217-232-182.ap-south-1.compute.amazonaws.com:27017/testdb'}
@Injectable()
export class ProfileProvider {

  constructor(public http: Http,) {

  }

  public getProfile(){
    return this.http.get(CONFIG.apiUrl+'User').map(response => response.json().result);
  }

}
这是我的Ionic页面,为了演示,假设我有一个电子邮件ID硬编码在一个名为userEmail的变量中。我如何将它传递给节点JS,然后再传递给mongodb以获取详细信息

import { Component, ViewChild } from '@angular/core';
import { IonicPage, NavController, NavParams,Platform, Navbar} from 'ionic-angular';
import { ToastController } from 'ionic-angular';
import { NativeStorage } from '@ionic-native/native-storage';
import { TutorPage } from '../tutor/tutor';
import { StudentPage } from '../student/student';
import { Observable } from 'rxjs/Observable';
import { ProfileProvider } from '../../providers/profile/profile';
@Component({
selector: 'page-profile',
templateUrl: 'profile.html'
})
export class ProfilePage {
userImg : any;
userName : string;
profileType :string;
instr : boolean;
stud :boolean;
userEmail : string = "abc@gmail.com";
lastSeen : any;
selectedProfile : any;
canLeavePage : boolean = false;
User: Observable<any>;
@ViewChild('navbar') navBar: Navbar;
  constructor(public navCtrl: NavController, private nativeStorage : NativeStorage, private toastCtrl : ToastController, platform : Platform,
  public ProfileDetails : ProfileProvider) {
  }

  fetchProfileDetails(){
    this.User = this.ProfileDetails.getProfile();
    console.log(this.User)
  }

}

请帮助我理解我哪里出错了

您没有传递MongoDB查询的搜索条件。UserProfile.findquery,回调

   app.get('/User', function (req, res) {
        UserProfile.find({
            EmailID: req.query.EmailID
        }, function (err, profile) {
            // if there is an error retrieving, send the error. nothing after res.send(err) will execute
            if (err) {
                return res.json({
                    "success": false,
                    "msg": err
                })
                console.log(err);
            }
            res.status(200).send({
                "success": true,
                "result": profile
            })
        });
    });
您没有传递任何电子邮件ID

return this.http.get(CONFIG.apiUrl+'User?EmailID=abc@abc.com').map(response => response.json().result);

您的查询不正确。对不起,您能详细说明一下吗?请检查我的答案。
return this.http.get(CONFIG.apiUrl+'User?EmailID=abc@abc.com').map(response => response.json().result);