2017-10-17 34 views
2

我想保存在MongoDB数据库的HTML表单捕获的信息,我有以下代码:从表单保存信息到MongoDB数据库?

<!DOCTYPE html> 
<html> 
<head> 
<title>Intro to Node and MongoDB</title> 
</head> 

<body> 
<h1>Into to Node and MongoDB</h1> 
<form method="post" action="/addname"> 
<label>Enter Your Name</label><br> 
<input type="text" name="firstName" placeholder="Enter first name..." required> 
<input type="text" name="lastName" placeholder="Enter last name..." required> 
<input type="submit" value="Add Name"> 
</form> 
</body> 
</html> 

而且下面的JavaScript代码将是我app.js

var express = require("express"); 
var app = express(); 
var port = 3000; 

var bodyParser = require('body-parser'); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 


var mongoose = require("mongoose"); 
/* 
mongoose.Promise = global.Promise;mongoose.connect("mongodb://localhost:27017/node-demo"); 
*/ 

var promise = mongoose.connect('mongodb://localhost:27017/node-demo', { 
    useMongoClient: true, 
    /* other options */ 
}); 


var nameSchema = new mongoose.Schema({ 
firstName: String, 
lastName: String 
}); 

var User = mongoose.model("User", nameSchema); 

app.use("/", (req, res) => { 
res.sendFile(__dirname + "/index.html"); 
}); 



app.post("/addname", (req, res) => { 
var myData = new User(req.body); 
myData.save() 
.then(item => { 
res.send("item saved to database"); 
}) 
.catch(err => { 
res.status(400).send("unable to save to database"); 
}); 
}); 



app.listen(port,() => { 
console.log("Server listening on port " + port); 
}); 

显然发布请求正在工作,填写字段并按下输入类型提交,但是当检查数据库为空时,就像它创建时一样。有谁知道我为什么不保存这些信息?

+0

一些建议:1.尝试将'req.body'和'myData'记录到控制台,看看它们是否是你期望的那样。 2.你是否收到服务器的回复? 3.如果你这样做,哪一个“项目保存到数据库”或“无法保存到数据库”? – Jaxx

回答

0

我在这里运行你的代码,并且没有调用app.post。这是因为您正在使用app.use发送index.htmlapp.use用于将middleware绑定到您的应用程序。相反,您应该使用app.get,它会告诉express要监听/的请求,并在看到该请求时运行该功能。

app.get("/", (req, res) => { 
res.sendFile(__dirname + "/index.html"); 
}); 
+0

你是对的!现在它工作!谢谢 :) –

相关问题