MEAN Stack - 将云 MongoDB 连接到 Angular 应用程序?

Posted

技术标签:

【中文标题】MEAN Stack - 将云 MongoDB 连接到 Angular 应用程序?【英文标题】:MEAN Stack - Connect Cloud MongoDB to Angular Application? 【发布时间】:2019-04-30 04:44:26 【问题描述】:

我想我可能遗漏了一些东西,因为我没有经常使用 MongoDB。

如何将我的 Angular 应用程序连接到可以通过 Atlas 访问的 MongoDB 数据库?目前,我可以毫无问题地将应用程序连接到本地 MongoDB 数据库,但我找不到将应用程序链接到实时数据库的任何事情。

server.js:

import express from 'express';
import cors from 'cors';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';

// Models
import Invoice from './server/models/Invoice.model';

const app = express();
const router = express.Router();

app.use(cors());
app.use(bodyParser.json());

mongoose.connect('mongodb://localhost/[myDatabaseName]', 
  useNewUrlParser: true
)

const connection = mongoose.connection;

connection.once('open', _ => 
  console.log('MongoDB database connection established');
)

app.use('/', router);

router.route('/invoices').get((req, res) => 
  Invoice.find(, (err, invoices) => 
    res.json(invoices);
  )
)

router.route('/invoices/:id').get((req, res) => 
  Invoice.findById(req.params.invoiceId, (err, invoice) => 
    res.json(invoice);
  )
)

router.route('/invoices').post((req, res) => 
  let newInvoice = new Invoice(req.body);
  newInvoice.save()
    .then(invoice => 
        res.status(200).send(invoice);
    )
    .catch(err => 
        res.status(400).send('Failed to save new invoice');
    )
  )

  router.route('/invoice/update/:id').post((req, res) => 
    Invoice.findById(req.params.id, (err, invoice => 
      if (!invoice) 
        return next(new Error('Unable to find invoice'));
       else 
        invoice.save()
            .then(invoice => 
                res.json('Successfully updated invoice', invoice);
            )
            .catch(err => 
                res.status(400).send('Error updating invoice', err);
            )
      
    ))
)

router.route('/invoices/delete/:id').get((req, res) => 
  Invoice.findByIdAndRemove(
    id: req.params.id
  , (err, invoice) => 
    if (err) 
        res.json(err);
     else 
        res.json('Successfully deleted invoice');
    
  )
)

app.listen(4000, () => 
  console.log(`Express server running on port 4000`);
)

invoices.service.ts:

import  Injectable  from '@angular/core';
import  HttpClient  from '@angular/common/http';
import  Observable, from  from 'rxjs';

import Invoice from '@app/interfaces/invoice.interface';
import  NotificationsService  from '@app/services/notifications/notifications.service';

@Injectable(
  providedIn: 'root'
)

export class InvoicesService 

  uri = 'http://localhost:4000';

  constructor(private notificationsService: NotificationsService, private http: HttpClient) 

  

  getInvoices() 
    return this.http.get(`$this.uri/invoices`);
  


【问题讨论】:

mongoose.connect中的“localhost”更改为实际的实时数据库服务器。 【参考方案1】:

我在 mlab 中托管了我的 MongoDB,我正在使用下面的行进行连接。检查这是否对您有用

const db = "mongodb://user:pass@dsxxxxx.mlab.com:port/poc"
mongoose.connect(db, err =>
if(err)
    console.log('Error! '+ err)
else
    console.log('Connected to Mongodb')

)

【讨论】:

谢谢。看到这个,它让我想起了 MongoDB 连接 URI 字符串的模式,我已经看过并且能够使用它来连接到数据库。您是如何在应用程序中为 HTTP 请求添加 URI 的? 我正在使用这样的方式来形成 http 请求的 URI const api = require('./routes/api') app.get('/', function(req, res) res.send ('Hello from server') ) app.get('/uri1i', api) app.get('/uri2', api) app.get('/usr3', api) app.get('/uri4' ,API)。我在 api.js 中编写了每个 URI 的逻辑

以上是关于MEAN Stack - 将云 MongoDB 连接到 Angular 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB Auth无法在Bitnami MEAN Stack Image上找到用户名

如何使用特定集合 Mongoose-Express-Mongodb (MEAN STACK)

MEAN STACK APP部署HEROKU问题 MongoNetworkError: failed to connect to server

(MEAN STACK)后端在我提交表单时将objectId和__v:0保存在mongodb中

无法使用 MEAN 堆栈连接到 Mongodb.atlas 集群

在 MEAN Stack 应用程序中从 mongo db 检索数据