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中