最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何在 Node 中使用 Mongoose 进行发布请求

网站源码admin38浏览0评论

如何在 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

发布评论

评论列表(0)

  1. 暂无评论