如何从Node.js更新数据

时间:2019-07-18 17:14:49

标签: node.js mongoose

我想使用id更新我的数据,但一直无法更新。它甚至没有给出任何错误并存储空值

router.put('/special/:id', function(req, res) {

    User.findByIdAndUpdate(req.params.id, {

        $set: {email: req.body.email, password: req.body.password}
    },
    {

        new: true,
        useFindAndModify: false
    },
    function(err, updatedData) {

        if(err) {

            res.send('Error updating');
        } else {

            res.json(updatedData);
        }
    });
});

1 个答案:

答案 0 :(得分:0)

尝试使用异步重写它,并确保您的Mongoose模式也正确。 因此,您的猫鼬模型应该是一个名为“ userModel.js”的单独文件。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var userSchema = new Schema ({
    email: String,
    password: String,

});

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

然后在您的app.js中。 有:

const express = require('express');
const app = express();
const mongoose = require('mongoose');
const port = 3000;
const bodyParser = require('body-parser');

//Body Parser Middleware
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())

//connect to db
mongoose.connect('mongodb://localhost:27017/YOUR_DB_NAME_HERE',{useNewUrlParser: true})
let db = mongoose.connection;
//check db connection 
db.once('open', function() {
    console.log('Connected to ' + db.name)
})
//check for db error
db.on('error', function(err) {
    console.log(err);
})

//Starting App (on localhost:3000)
app.listen(port, function() {
    console.log('Server started on port ' + port);
});

注意:启动应用程序后。在您的节点控制台中,如果没有看到消息“已连接到{您的数据库名称}”。然后,要么您没有运行mongoDB,要么您没有安装它。因此,首先您要创建一个新的控制台窗口,然后键入:

mongod

这应该可以工作,并且如果它已经在运行,您应该在底部看到一条消息:

2019-07-19T12:17:37.716+1000 E STORAGE  [initandlisten] Failed to set up listener: SocketException: Address already in use

现在,一旦您弄清楚了。而且您发现与mongoDB的连接良好。您要重做PUT路由以发出异步请求,如下所示。

注意:在路由之前,您需要先建立模型,以便猫鼬可以为您更新记录。

//Requiring your shop model
const User = require('./models/userModel')
app.put('/special/:id', async function(req, res){

      const id = req.params.id

      //Making a user object to parse to the update function
      let updatedUser = {}
      updatedUser.email = req.body.email
      updatedUser.password = req.body.password

      await User.findByIdAndUpdate(id, updatedUser, function(err, updatedData){
             if(err){
                      console.log(err)
          }
             else {
                      console.log(updatedData)
                      //res.redirect or res.send whatever you want to do
         }
      })



})