无法使用 express API 和节点 JS(Angular 4)将数据发布到 mongodb

Posted

技术标签:

【中文标题】无法使用 express API 和节点 JS(Angular 4)将数据发布到 mongodb【英文标题】:Not able to post data to mongo db using express API and node JS(Angular4) 【发布时间】:2019-01-26 21:37:30 【问题描述】:

我已经成功完成了使用 express API 和节点 js 从 MongoDB 获取数据并将其绑定到 angular ng2-smart-table。 单击表的添加按钮时,我正在调用 express API,但在 api.js 中未调用我的 post 方法,我尝试在 post 中打印 console.log 但未调用。 为了更好地理解,特此发布代码:

Component.ts

onCreateConfirm(event,_dataService): void           
this._dataService.postMutualFunds(event.newData);
event.confirm.resolve(event.newData);

data.service.ts

postMutualFunds(parameterValue:any )
   return this._http.post('/add_mutual_funds', 
   params:parameterValue).map(result => this.result = result.json().data);

api.js

var express = require('express');
var router = express.Router();
var MongoClient = require('mongodb').MongoClient;
var ObjectID = require('mongodb').ObjectID;
var bodyParser = require("body-parser");

 const connection  = (closure) => 
 return
 MongoClient.connect('mongodb://xxx.com:63898/xx', (err,db) => 
 if(err)
        return console.log(err);
    
    closure(db);
    );
  
 //Get call
 router.get('/mutual_funds',(req,res) =>
    console.log("test get"); //This is executed
    connection((db) =>            
    var projection = _id:0;
    db.collection('mutual_funds').find().project(projection). 
    toArray().then((mutual_funds) => 
           response.data = mutual_funds;
           res.json(response);
       )
     )      
  )

 //Post call
 router.post('/mutual_funds',(req,res) => 
        console.log(req.body.params);
        console.log("test post");
        db.collection('mutual_funds').insertOne(req.body.params)
 )

  module.exports = router;

现在我可以调用 api js 但无法将数据插入到 mongodb 请在下面找到 api.js 执行输出的屏幕截图 //为什么我无法发布数据?(更新了我上面的邮政编码)遇到错误500

【问题讨论】:

为什么不订阅服务函数调用this._dataService.postMutualFunds(event.newData).subscribe((data)=> console.log(data);); 【参考方案1】:

你没有订阅服务

onCreateConfirm(event,_dataService): void           
  this._dataService.postMutualFunds(event.newData).subscribe(    
   (data)=>
      console.log(data)     
   ,
   (err)=>
     console.log(err)
   
 )
 event.confirm.resolve(event.newData);

服务方法返回一个配置的 Observable 数据,组件订阅方法的返回值。这 订阅回调将数据字段复制到组件的 config 对象,在组件模板中绑定数据 显示。

【讨论】:

我使用了您上面提到的代码,现在我可以调用 api js 但无法将数据插入到 mongodb 我更新了 api.js 代码和提供的输出屏幕截图以获取更多详细信息,如果您对此有所帮助,将会有所帮助! 首先,您不会为路由器使用 res.json() 返回任何内容。第二,什么是错误细节,你检查数据是否成功插入到db中 我尝试使用此代码 db.collection('mutual_funds').insert(req.body.params,function(err,result) if (err) res.send('Error') ; console.log(err); else res.send('Success'); ) 我用错误 500 的屏幕截图更新了帖子,请检查谢谢 您似乎没有连接到 db。你没有在这条路线中使用 connection((db) => 我建议你创建全局(singelton)实例来连接到数据库【参考方案2】:

你为什么不订阅服务函数调用

this._dataService.postMutualFunds(event.newData).subscribe((data)=> console.log(data),
(err)=>console.log(err),
()=>console.log('Observable complete')
);

【讨论】:

我使用了您上面提到的代码,现在我可以调用 api js 但无法将数据插入到 mongodb 我更新了 api.js 代码和提供的输出屏幕截图以获取更多详细信息,如果您对此有所帮助,将会有所帮助!

以上是关于无法使用 express API 和节点 JS(Angular 4)将数据发布到 mongodb的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 REST API 微服务(使用 Express 构建)将 MongoDB 更改流与节点 js 一起使用

无法使用 express 和 multer 运行 node.js 服务器以在节点中上传文件

使用 cors、express 和 google api 的 Node.js 服务器应用程序在 Azure 部署后无法正常工作

带有express和socket.io的节点js-找不到socket.io.js

无法使用 Express.js 从请求中获取 POST 正文

如何使用节点 js 从后端 API 请求 apikey?