如何解决这个问题请帮助我
const express=require("express");
const app=express();
const bodyparser=require("body-parser");
const cors=require("cors");
const mongoose=require("mongoose");
const PORT=4000;
app.use(cors());
app.use(express.urlencoded({extended:false}));
app.use(express.json());
app.use(bodyparser.urlencoded({extended:true}));
const URL='mongodb+srv://username:[email protected]/UserDB';
const userSchema=new mongoose.Schema({
name:{
type:String
},
password:{
type:String
}
});
const UserModel= mongoose.model("userData",userSchema);
app.get("/",(req,res)=>{
res.send("hello ")
})
app.get("/reg",(req,res)=>{
res.sendFile(__dirname+ "/./index.html")
})
app.post("/reg",async(req,res)=>{
const newUser= new UserModel(req.body);
await newUser.save();
res.status(201).json({
meg:"User created",
})
});
mongoose.connect(URL)
try {
console.log("Db is conected");
} catch (error) {
console.log("Db is not conected");
console.log(error);
process.exit(1);
}
app.listen(PORT, ()=>{
console.log(`Server is running http://localhost:${PORT}`)
});
个字符
输入输出
如何解决这个问题请帮助.如果你知道任何人如何slove请解释.分享您的代码请.我会尝试slove这个问题大约5days.but我canot slove这个问题.
enter image description hereenter image description hereenter image description here的一个字符串
2条答案
按热度按时间af7jpaap1#
看起来你的代码基本上是正确的,但是你可以做一些改进和检查来确保数据被正确地发送和接收:
**1. Body解析顺序:**您同时使用body-parser和express.json()来解析请求body,最好只使用express.json(),因为Express默认包含express.json()。
替换:
字符串
使用:
型
删除主体解析器导入及其用法。
**2.表单数据编码:**您连接数据库的try-catch块没有处理mongoose. connect返回的promise,您应该使用await关键字来正确处理。
替换:
型
使用:
型
为了防止空数据被发送到MongoDB,您应该在保存数据之前添加验证检查。具体来说,您应该在尝试保存用户之前检查必填字段(在本例中,名称和密码)是否为空。
下面是您的app.post(“/reg”,redc(req,res)=> { route with validation check:
型
此更新的代码执行以下操作:
h4cxqtbf2#
在您的
<form>
中删除enctype="multipart/form-data"
,只需:字符串
这将把你的表单作为默认的
application/x-www-form-urlencoded
发送,这样你的express.urlencoded()
函数就可以解析数据了。此时req.body
将没有解析后的表单数据,所以你将无法向mongodb添加数据。如果你想发送
multipart/form-data
来上传文件,那么你需要像multer这样的东西来解析数据。你可以通过捕获错误并记录它们来改进你的代码。这将有助于你在将来进行调试。更新你的路由处理程序回调函数以使用
try/catch
,如下所示:型
最后,因为你已经创建了这样的模型:
型
Mongoose会寻找一个名为
userdatas
的集合,因为:第一个参数是模型所属集合的单数名称。Mongoose会自动查找模型名称的复数小写版本。
因此,如果您的集合名为
users
,则在创建模型时需要使用:用途:型