如何在 Node 中使用 Mongoose 进行发布请求"/>
如何在 Node 中使用 Mongoose 进行发布请求
我正在按照教程 () 构建 API,但它是 2 年前的我似乎不能完全更改代码以适应库中的最新更新。我能够得到工作的 get 请求,但不能得到 post。当我做
.post(addNewCoordinates);
我得到“错误:Route.post() 需要一个回调函数,但得到了一个[对象未定义]”
网上说要添加异步等待,我做了。我还缺少其他东西吗??
我对 mongodb 的设置是我在指南针 GUI 中创建了一个数据库,实际上就是它。(从技术上讲,我在数据库中有一个集合)
这是我的 index.js
import express from 'express';
import routes from './src/routes/coordinatesRoutes';
import mongoose from 'mongoose';
import bodyParser from 'body-parser';
const app = express();
routes(app)
const PORT = 1234;
// Will print at localhost:{Port}
app.get('/', (req, res) =>
res.send(`Node and express server running on port ${PORT}`)
)
// Will print in terminal
app.listen(PORT, () =>
console.log(`Your server is running on port ${PORT}`))
// Database Setup
// mongoose connection
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost:27017/coordinates', {
useNewUrlParser: true,
useUnifiedTopology: true
})
//bodyparser setup
app.use(bodyParser.urlencoded({ extended: true}));
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');
next();
});
坐标控制器.js:
import mongoose from 'mongoose';
import { InputDataSchema } from '../models/coordinatesModel'
const InputData = mongoose.model('InputData', InputDataSchema);
const addNewCoordinates = async (req,res) => {
let newCoordinates = new InputData(req.body);
await newCoordinates.save((err, coordinates) => {
if (err) {
res.send(err)
}
res.json(coordinates)
})
}
export default addNewCoordinates;
坐标模型.js:
import mongoose from 'mongoose';
const Schema = mongoose.Schema;
export const InputDataSchema = new Schema({
latitude: {
type: Number,
required: "Enter latitude"
},
longitude: {
type: Number,
required: "Enter longitude"
},
altitude: {
type: Number,
required: "Enter altitude"
},
ecef: {
type: Array
},
created_date: {
type: Date,
default: Date.now
}
})
坐标Route.js
import addNewCoordinates from '../controllers/coordinatesController'
const routes = (app) => {
//create route for donations
app.route('/lla')
//create get request
.get((req, res) =>
res.send('GET request successful!'))
//create post request
.post((req, res) =>
res.set('POST request successful!'));
// This crashes and gives me a Route.post() requires a callback function but got a [object Undefined] so I'm just trying to focus on getting a post without really any data.
//.post(addNewCoordinates);
// create a new route so you can get these donation entries by their ID's
app.route('/lla/:timestamp')
//create put request
.put((req, res) =>
res.send('PUT request successful!'))
//create delete request
.delete((req, res) =>
res.send('DELETE request successful'))
}
export default routes;
感谢您的帮助!
回答如下:JavaScript 中有两种导出方式,即
default exports
和named exports
。既然有两种导出方式,那么相应的导入方式也有。
当您从 coordinatesController.js 导出时,它实际上是一个
default export
,而 coordinatesRoute.js 中的导入是 named export
. 的导入
导入默认导出的正确方法是没有
{..}
或
从导入 addNewCoordinates '../controllers/coordinatesController'
这也可以通过将其导出为
named
来解决。
更多内容可以参考:MDN Docs for export
更多推荐
如何在 Node 中使用 Mongoose 进行发布请求
发布评论