[英]Node.js Update information in mysql
我正在尝试实现一个函数,该函数将更新 MySQL 数据库中的信息。 我找不到解决这个问题的方法。 邮递员没有读取我的 ID、用户名、电子邮件。 我设法使登录和注册在我的 react.js 网站上工作。 但现在我想让用户能够编辑他们的个人资料信息。
客户模型.js
const sql = require("../config/db.config");
const Customer = function(customer) {
this.email = customer.email;
this.username = customer.username;
this.id = customer.id;
};
Customer.updateById = (customer) => {
sql.query(
"UPDATE users SET username = ?, email = ? WHERE id = ?",
[customer.email, customer.username, customer.id],
(err, res) => {
if (err) {
console.log("error: ", err);
result(null, err);
return;
}
if (res.affectedRows == 0) {
// not found Customer with the id
result({ kind: "not_found" }, null);
return;
}
console.log("updated customer: ", { id: id, ...customer });
result(null, { id: id, ...customer });
}
);
};
auth-controller.js
const db = require("../models");
const config = require("../config/auth.config");
const Customer = require("../models/customer.model.js");
const User = db.user;
const Role = db.role;
const Op = db.Sequelize.Op;
var jwt = require("jsonwebtoken");
var bcrypt = require("bcryptjs");
exports.signup = (req, res) => {
// Save User to Database
User.create({
username: req.body.username,
email: req.body.email,
password: bcrypt.hashSync(req.body.password, 8)
})
.then(user => {
if (req.body.roles) {
Role.findAll({
where: {
name: {
[Op.or]: req.body.roles
}
}
}).then(roles => {
user.setRoles(roles).then(() => {
res.send({ message: "User registered successfully!" });
});
});
} else {
// user role = 1
user.setRoles([1]).then(() => {
res.send({ message: "User registered successfully!" });
});
}
})
.catch(err => {
res.status(500).send({ message: err.message });
});
};
exports.signin = (req, res) => {
User.findOne({
where: {
username: req.body.username
}
})
.then(user => {
if (!user) {
return res.status(404).send({ message: "User Not found." });
}
var passwordIsValid = bcrypt.compareSync(
req.body.password,
user.password
);
if (!passwordIsValid) {
return res.status(401).send({
accessToken: null,
message: "Invalid Password!"
});
}
var token = jwt.sign({ id: user.id }, config.secret, {
expiresIn: 86400 // 24 hours
});
var authorities = [];
user.getRoles().then(roles => {
for (let i = 0; i < roles.length; i++) {
authorities.push("ROLE_" + roles[i].name.toUpperCase());
}
res.status(200).send({
id: user.id,
username: user.username,
email: user.email,
roles: authorities,
accessToken: token
});
});
})
.catch(err => {
res.status(500).send({ message: err.message });
});
};
exports.update = (req, res) => {
// Validate Request
if (!req.body) {
res.status(400).send({
message: "Content can not be empty!"
});
}
console.log(req.body);
Customer.updateById(
req.body.customerId,
req.body.username,
req.body.email,
new Customer(req.body),
(err, data) => {
if (err) {
if (err.kind === "not_found") {
res.status(404).send({
message: `Not found Customer with id ${req.params.customerId}.`
});
} else {
res.status(500).send({
message: "Error updating Customer with id " + req.params.customerId
});
}
} else res.send(data);
}
);
};
auth.routes.js
const { verifySignUp } = require("../middleware");
const controller = require("../controllers/auth.controller.js");
module.exports = function(app) {
app.use(function(req, res, next) {
res.header(
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8081'),
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'),
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'),
res.setHeader('Access-Control-Allow-Credentials', true),
"Access-Control-Allow-Headers",
"x-access-token, Origin, Content-Type, Accept"
);
next();
});
app.post(
"/api/auth/signup",
[
verifySignUp.checkDuplicateUsernameOrEmail,
verifySignUp.checkRolesExisted
],
controller.signup
);
app.post("/api/auth/signin", controller.signin);
app.put("/api/auth/update", controller.update);
};
嗨@lee很快fatt你能分享一张邮递员如何传递数据的截图吗?
解决方案:你必须在URL 中传递 id para或者你必须存储在会话中
我在这里分享解决方案文章链接
路由器允许传递 id 参数
app.get('/', getHomePage);
app.get('/add', addPlayerPage);
**app.get('/edit/:id', editPlayerPage);
app.get('/delete/:id', deletePlayer);**
app.post('/add', addPlayer);
app.post('/edit/:id', editPlayer);
URL 看起来像 http://localhost:5000/your-route-path/1
id para (Int value) 基于用户 id 你必须传递 URL 的结尾
我希望你得到链接
https://dev.to/achowba/build-a-simple-app-using-node-js-and-mysql-19me
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.