我想使用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);
}
});
});
答案 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
}
})
})