如何使用 express node.js 将数据保存在 mongodb 中?
How to save data in mongodb with express node.js?
当我尝试使用 Postman 向 mogoose 发出 post 请求时遇到问题,我得到以下答案:
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /</pre>
</body>
</html>
我无法理解原因,我的index.js代码:
const express = require("express");
const mongoose = require("mongoose");
const cors = require('cors')
const bodyParser = require('body-parser')
mongoose.connect(
process.env.MONGODB_URL || "mongodb://localhost/trading",
{
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
}
).then(item => {
console.log('conectado com o banco')
}).catch((err)=>{
console.log(err)
});
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}))
const candlesRoute = require("./routes/candles");
const home = require("./routes/home");
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", 'GET,PUT,POST,DELETE');
app.use(cors());
next();
})
app.use("/", home);
app.use("/candles", candlesRoute);
const PORT = 8080;
app.listen(PORT, () => {
console.log("Servidor Conectado");
});
我的路线candles.js:
const express = require("express");
const router = express.Router();
const mongoose = require("mongoose");
require("../models/Candles");
const candlesTick = mongoose.model("candles");
router.post('/candles', async (req, res) => {
try {
const velas = req.body
await new candlesTick(velas).save();
console.log('successe')
} catch (error) {
console.log(error);
}
});
module.exports = router;
最后是我的模型 Candles.js:
const mongoose = require('mongoose')
//const Schema = mongoose.Schema
const Candles = new mongoose.Schema({
titulo: {
type: String,
},
})
mongoose.model("candles", Candles);
我在Postman中的请求如下
{
"titulo": "DENT/ETH"
}
我已经tmbm直接发送数据了,但是还是不行,我不明白这是什么原因,请哪位大侠帮忙谢谢
我认为 req.body 未被解析,因为您已将 bodyparser extendedUrl 设置为 false
。试试这个:
app.use(bodyParser.urlencoded({extended: true}))
此外,您只需使用 MyModel.create(myContent)
创建对象,而不是使用 new Model() + save()。
你应该也发布你的终端日志但是 nvm :)
我可以通过查看您的代码来猜测问题所在:-
你的mongodb本地URL是错误的,没有提到端口。
对于本地服务器
,它总是像 mongodb://localhost:27017/trading
我不太了解这个但是你没有在 Candles.js
中导出模型
app.use("/candles", candlesRoute);
将向该路由添加命名空间,并且路由器在 post 请求中也有 candles
。最后,可用路线将是 POST {{host}}/candles/candles
.
请尝试从
中删除candles
router.post('/candles', async (req, res) => {
...
})
或者 postman 中的 URL 为 {{host}}/candles/candles
当我尝试使用 Postman 向 mogoose 发出 post 请求时遇到问题,我得到以下答案:
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /</pre>
</body>
</html>
我无法理解原因,我的index.js代码:
const express = require("express");
const mongoose = require("mongoose");
const cors = require('cors')
const bodyParser = require('body-parser')
mongoose.connect(
process.env.MONGODB_URL || "mongodb://localhost/trading",
{
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
}
).then(item => {
console.log('conectado com o banco')
}).catch((err)=>{
console.log(err)
});
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}))
const candlesRoute = require("./routes/candles");
const home = require("./routes/home");
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", 'GET,PUT,POST,DELETE');
app.use(cors());
next();
})
app.use("/", home);
app.use("/candles", candlesRoute);
const PORT = 8080;
app.listen(PORT, () => {
console.log("Servidor Conectado");
});
我的路线candles.js:
const express = require("express");
const router = express.Router();
const mongoose = require("mongoose");
require("../models/Candles");
const candlesTick = mongoose.model("candles");
router.post('/candles', async (req, res) => {
try {
const velas = req.body
await new candlesTick(velas).save();
console.log('successe')
} catch (error) {
console.log(error);
}
});
module.exports = router;
最后是我的模型 Candles.js:
const mongoose = require('mongoose')
//const Schema = mongoose.Schema
const Candles = new mongoose.Schema({
titulo: {
type: String,
},
})
mongoose.model("candles", Candles);
我在Postman中的请求如下
{
"titulo": "DENT/ETH"
}
我已经tmbm直接发送数据了,但是还是不行,我不明白这是什么原因,请哪位大侠帮忙谢谢
我认为 req.body 未被解析,因为您已将 bodyparser extendedUrl 设置为 false
。试试这个:
app.use(bodyParser.urlencoded({extended: true}))
此外,您只需使用 MyModel.create(myContent)
创建对象,而不是使用 new Model() + save()。
你应该也发布你的终端日志但是 nvm :) 我可以通过查看您的代码来猜测问题所在:-
你的mongodb本地URL是错误的,没有提到端口。 对于本地服务器
,它总是像mongodb://localhost:27017/trading
我不太了解这个但是你没有在 Candles.js
中导出模型
app.use("/candles", candlesRoute);
将向该路由添加命名空间,并且路由器在 post 请求中也有 candles
。最后,可用路线将是 POST {{host}}/candles/candles
.
请尝试从
中删除candles
router.post('/candles', async (req, res) => {
...
})
或者 postman 中的 URL 为 {{host}}/candles/candles