【问题标题】:Not able to update a record in mongodb using mongoose无法使用 mongoose 更新 mongodb 中的记录
【发布时间】:2018-04-04 15:43:57
【问题描述】:

我正在使用 mongo express 和 node 编写一个 API,到目前为止我有两个集合 1) 用户 2) 用户列表

我正在尝试为用户实现更改密码功能,并希望更新登录用户的密码。这是我的 api 代码。

由于值错误,面向字符串的转换失败。

    const express = require("express");
const app  = express();
const bodyParser  =  require('body-parser');
const port = 4000;
const jwt =  require('jsonwebtoken');  //used to create, sign , and verify tokens
const logger = require('morgan');
const mongoose = require("mongoose");
mongoose.Promise = global.Promise;
mongoose.connect("mongodb://localhost:27017/saddleHorseacademy");

//Setting up basic middleware for all express requests
app.use(logger('dev')); //Log requests to API using morgan

//Enabling CORS from the client side
app.use(function (request,response,next) {
    response.header("Access-Control-Allow-Origin","*");
    response.header('Access-Control-Allow-Methods','PUT ,GET ,POST ,DELETE ,OPTIONS');
    response.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept, Authorization, Access-Control-Allow-Credentials");
    response.header("Access-Control-Allow-Credentials","true");
    next();
});

var registerSchema  =  new mongoose.Schema({
    firstName: String,
    lastName: String,
    address: String,
    birthDay: Date,
    packageOption: String,
    batchOption: String,
    startDate: Date,
    endDate: Date,
    phoneNumber: Number,
    emailValue: String,
    specialRemarks: String
});

// var changePassword = new mongoose.Schema({
//     username : String,
//     newPassword : String,
// });

var createUser = new mongoose.Schema({
  userName : String,
  password : String
});

var students = mongoose.model("students",registerSchema);

var userList = mongoose.model("UserList",createUser);

// var passwordChange = mongoose.model("UserList",changePassword);

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

app.get("/", (request,response) =>
{
  response.send("hello");
});

// post call for creating user
app.post("/addStudent",(request,response)=>{
  var myData = new students(request.body);

  myData.save().then(item=>{
      response.send('Student successfully registerd');
  })
  .catch(error =>{
    response.status(400).send('Student not successfully registered');
  });
});

//updating the password
app.put("/loginPassword",(request,response)=>{
      var newPassword =  new userList(request.body);
      var query = {userName:request.body.userName};

      userList.findOneAndUpdate(query,{$set:{password:newPassword}},{new:false},function(error,doc) {
        if(error)
        {
          console.log(error);
          response.send("Password not updated");
        }
        else {
          response.send("password updated");
        }
      })

});
// post call creating user
app.post("/loginPassword",(request,response)=>{
    var myUsers = new userList(request.body);

    myUsers.save().then(item2=>{
      response.send("User Created");
    })
    .catch(error=>{
      response.status(400).send("not able to create user");
    });
});

app.listen(port,()=>{
  console.log("server listening to port" +port);
})

所以我想要的是在我的创建用户模式中,当我从前端调用 app.put api 时,我的密码应该得到更新。请通过编写确切的查询来帮助某人。

当我尝试执行 findOneandUpdate() 时,我得到了 cast ti string 错误。请任何人帮忙。或编写 put 请求。谢谢

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您创建了一个变量newPassword,它是一个model 对象,您将它作为string 传递。

    将您的 query 对象更改为:

        {$set: {password: request.body.newPassword}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      相关资源
      最近更新 更多