【发布时间】:2017-10-22 11:01:44
【问题描述】:
我正在构建一个天气应用程序,该应用程序允许用户通过在向 OpenWeatherMap API 发出 GET 请求的输入中输入位置来登录并获取特定城市的天气。我已经内置了一个功能,允许用户将他们查找的位置设置为他们的主页天气。我的理由是在用户模型中分配一个名为“位置”的属性,并在用户单击“设置为主页天气”时更新它。我正在尝试使用 AJAX 发出补丁请求,但即使在请求上触发了成功函数,模型也不会更新。
这是我的 AJAX 请求:
var userId = $('.set-weather').attr('data-id')
$(document).on('click', '.location-btn', function(){
console.log(setLocation)
var data = {
location: setLocation
}
console.log("/users/" + userId)
$.ajax({
url: '/users/' + userId,
method: 'patch',
dataType: "json",
data: ({location: data}),
success: function(result){
console.log("Success")
},
error: function(result){
console.log("failure")
}
})
})
这是使用 Node 和 Express 的用户模型:
// app/models/user.js
// load the things we need
var mongoose = require('mongoose');
var bcrypt = require('bcrypt-nodejs');
// define the schema for our user model
var userSchema = mongoose.Schema({
email : String,
password : String,
location : String,
});
// methods
// generating a hash
userSchema.methods.generateHash = function(password) {
return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};
// checking if password is valid
userSchema.methods.validPassword = function(password) {
return bcrypt.compareSync(password, this.password);
};
// create the model for users and expose it to our app
module.exports = mongoose.model('User', userSchema);
到用户 API 的路由:
router.route('/users/:id')
.get(userController.show)
.patch(userController.update)
以及控制器中的Update方法:
controller.update = function(req, res){
var id = req.params.id;
var location = req.params.location;
User.findOneAndUpdate(
{_id: id},
{
location: location
},
function(err, user){
if(err){
throw err;
}
res.json(user)
}
)
}
【问题讨论】:
标签: node.js ajax mongodb express model-view-controller