【发布时间】:2019-06-19 20:28:31
【问题描述】:
我正在学习如何设置 Express 服务器,但在创建新用户时遇到了一个奇怪的问题。 POST 请求通过并且没有给出错误并将我带到我的仪表板,但是当我查看 sqlite DB 时,它显示注册表中保存为未定义的所有值。我相信我已经安装了 body-parser 并将其正确调用到服务器中。
我尝试更改 extended: true 而不是 false 并添加 res.setHeader('Content-Type', 'text/plain') 到 app.use 中,如 body-parser guide 所述,但仍保存为未定义每次。
这是我的 server.js 代码
const app = express();
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.setHeader('Content-Type', 'text/plain');
next();
});
这是 server.js 中的 POST 代码
app.post('/register', function(req, res) {
bcrypt.hash(req.body.password, saltRounds, function(err, hash) {
let db = new sqlite3.Database("./database/InvoiceApp.db");
let sql = `INSERT INTO users(name, email, company_name, password) VALUES ('${req.body.name}','${req.body.email}','${req.body.company_name}','${hash}')`;
db.run(sql, function(err) {
if (err) {
throw err;
} else {
return res.json({
status: true,
message: "User Created"
});
}
});
db.close()
});
});
这是我的表单代码,我正在使用 vue.js
register () {
const formData = new FormData()
let valid = this.validate()
if (valid) {
formData.append('name', this.model.name)
formData.append('email', this.model.email)
formData.append('company_name', this.model.company_name)
formData.append('password', this.model.password)
this.loading = "Registering you, please wait"
axios.post('http://localhost:3128/register', formData).then(res => {
this.loading = ''
if (res.data.status === true) {
this.$router.push ({
name: 'dashboard',
params: { user: res.data.user }
})
} else {
this.status = res.data.message
}
})
} else {
alert('Passwords do not match')
}
}
创建新用户时,我不会收到任何错误消息,只有当我尝试以创建的用户身份登录或执行与创建的用户相关的其他操作时。为什么我的表单在 sqlite DB 中保存为未定义?
【问题讨论】:
-
确保在每一层都接收到数据。尝试执行
console.log(formData);并确保在表单代码中的axios.post()函数之前一切正常。然后,如果它很好,请检查它是否在服务器中正确接收console.log(req);
标签: javascript node.js sqlite express body-parser