mysql - 我的 POST 请求适用于 Node.js,但不适用于 API
问题描述
我正在使用 Nodejs 和 MySQL 作为数据库构建一个注册应用程序。因此,当我运行脚本时,它会在“localhost:3000/register”上显示“注册成功”消息,并且数据也会添加到表中。但是当我尝试通过 API 发送数据时,它给了我“无法发布/注册”这个。我在代码中找不到错误。请帮我解决一下这个。
我也在使用 body-parser 来连接 API 请求。我也使用 XAMPP。这是我的代码;
const express = require('express');
const mysql = require('mysql');
const bodyParser = require('body-parser');
const router = express.Router();
const bcrypt = require('bcrypt');
const saltRounds = 10;
// create connection to the database
const db = module.exports = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'pulse'
});
//connecting
db.connect((err) =>{
if(err){
throw err;
}
console.log('MySql connected...');
});
const app = module.exports = express();
app.use(bodyParser.urlencoded({extended: true})); //Accept URL Encoded params
app.use(bodyParser.json()); //accept JSON Params
//create user Table
app.get('/createUser',(req,res)=>{
let sql = 'CREATE TABLE users(id int AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255), dateOfBirth VARCHAR(255), password VARCHAR(255), PRIMARY KEY(id))';
db.query(sql,(err,result)=>{
if(err) throw err;
console.log(result);
res.send('User table created');
});
});
//register user
app.get('/register',(req,res,next)=>{
const post_data = req.body;
const name = post_data.name;
const email = post_data.email;
const dateOfBirth = post_data.date;
const password = post_data.password;
let userEmail = {'email':email};
let sql = 'SELECT * FROM users WHERE ?';
let query = db.query(sql,userEmail, (err,result)=>{
if(err) throw err
//console.log('[MySQL ERROR',err);
if(result && result.length) {
res.json('User already exists');
}
else{
let insertUser = {'name':name, 'email':email, 'dateOfBirth':dateOfBirth, 'password':password};
let sql = 'INSERT INTO users SET ?';
let query = db.query(sql,insertUser,function(err,result){
if(err) throw err;
res.json('Registration successful');
});
}
});
});
//creating the server
app.listen('3000', () => {
console.log("Server started on port 3000");
});
本地浏览器'localhost:3000/register'的结果是“注册成功”,表格中也增加了一行。在 API 中钻孔,
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /register</pre>
</body>
</html>
解决方案
您必须编写一个“POST”端点来解析请求正文。
app.get('/register',(req,res,next)=>{
.....
.....
})
将上述更改为
app.post('/register',(req,res,next)=>{
.....
.....
})
另外,我认为您不能通过简单地将端点称为 localhost:3000/register 来直接从浏览器调用“POST”端点。那只会调用“GET”端点。为了测试您的 POST api,您必须创建一个表单并从中进行 POST 调用,或者使用诸如“postman”之类的工具/google 扩展来进行 POST。
推荐阅读
- curl - 如何获取 zipkin 版本
- visual-studio-code - 如何在 Linux 中隐藏 pdflatex 生成的额外/辅助文件
- python - 使用 pandas 数据框随时间跳跃的股票价格的月度回报
- javascript - 提交表单时出现确认消息的问题
- python-3.x - Errno 2:没有这样的文件或目录:调用 s3.get_object() 时出现 SSLError
- java - 无法识别的字段“className”,@JsonTypeInfo
- c# - 将 Winform MS 图表另存为 SVG
- ios - Xcode 10“无法构建模块 Darwin / Foundation / CoreFoundation”等
- sql - access2016:sql查询以获取每个日期的总和
- android - 谷歌地图未显示在标签片段中