Angular+NodeJs+MongoDB搭建前后端程序
get请求:
//angular 前端get请求
this.client.get('http://localhost:3000/id/tom').subscribe(data => {
console.log(data);
}); //nodejs后端响应
app.get("/id/:name", function (request, response) {
var heroName = request.params.name;
//debugger;
console.log("name:" + request.params.name);
heros.find({name:heroName},function(err,heros){
if(err) return console.error(err);
response.send(heros);
}); });
另一种:
// client: HttpClient : @angular/common/http
this.client.get('http://localhost:3000/id', { params: { name: 'tom' } }).subscribe(data => {
console.log(data);
}); //var express = require("express"); var app = express();
app.get("/id/", function (request, response) {
var heroName = request.query.name;
console.log("name:" + request.query.name);
heros.find({name:heroName},function(err,heros){
if(err) return console.error(err);
response.send(heros);
}); });
post:
//angular发送post请求
this.client.post<Hero>('http://localhost:3000/hero', hero)
.subscribe(data => {
console.log(data);
}); //后台处理post请求
app.post("/hero", function (request, response) {
var theHero = new heros({name:'',race:[],price:});
console.log('theHero:' + theHero);
// theHero.save(function (err, data) {
// if (err) return console.error(err);
// response.send("post:" + theHero);
// }); });
通过Mongoose连接MongoDB,并进行查询和保存数据:
var mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/hero',{config:{autoIndex:false}}); // 进入mongo命令行 show dbs 将看到hero
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log("connection success");
});
var heroSchema = new mongoose.Schema({
name:String
});
heroSchema.set('autoIndex',false);
heroSchema.methods.display = function () {
console.log(this.name);
}
var Hero = mongoose.model('heros', heroSchema); //show collections 将看到heros
// 通过model 查询; 在mongo命令行 使用 db.heros.find({name:'tom'})
Hero.find({name:'tom'},function(err,heros){
if(err) return console.error(err);
console.log(heros);
});
//通过model创建theHero并保存到mongodb
var theHero = new Hero ({ name: 'tom' });
theHero.save(function (err, data) {
if (err) return console.error(err);
});
另外,解决跨域与请求带HttpHeaders报错问题:
//后台设置跨域访问
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Credentials", "true");
res.header("Access-Control-Allow- Methods","PUT,POST,GET,DELETE,OPTIONS");
res.header("Access-Control-Allow-Headers", "Content-Type,Access-Token");
res.header("Access-Control-Expose-Headers","*");
next(); //必须有
});
启动mongodb:
mongod --dbpath d:/test
启动nodejs后端服务,通过nodemon启动,修改test.js代码后自动生效:
nodemon test.js
后台代码:
var express = require("express");
var app = express();
var bodyParser = require('body-parser');
var multer = require('multer');
var upload = multer();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
var mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/hero',{config:{autoIndex:false}});
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log("connection success");
});
var heroSchema = new mongoose.Schema({
name:String,
race:[String],
price:Number
});
heroSchema.set('autoIndex',false);
heroSchema.methods.display = function () {
var msg = this.name + ":" + this.race.join(",") + ":" + this.price;
console.log(msg);
}
var heros = mongoose.model('heros', heroSchema);
//设置跨域访问
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Credentials", "true");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
res.header("Access-Control-Allow-Headers", "Content-Type,Access-Token");
res.header("Access-Control-Expose-Headers","*");
// res.header("X-Powered-By",' 3.2.1')
//res.header("Content-Type", "application/json;charset=utf-8");
next();
});
app.get("/id/:name", function (request, response) {
var heroName = request.params.name;
debugger;
console.log("name:" + request.params.name);
heros.find({name:heroName},function(err,heros){
if(err) return console.error(err);
response.send(heros);
});
});
app.get("/id", function (request, response) {
var heroName = request.query.name;
console.log("name:" + request.query.name);
heros.find({name:heroName},function(err,heros){
if(err) return console.error(err);
response.send(heros);
});
});
app.post("/hero",upload.array(), function (request, response) {
var param = request.body;
const theHero = new heros({name:param.name,race:param.race,price:param.price});
console.log('theHero:' + param.name);
theHero.save(function (err, data) {
if (err) return console.error(err);
response.send({'data':'ok'});
});
});
app.listen(3000);
参考:
Angular+NodeJs+MongoDB搭建前后端程序的更多相关文章
- 利用grunt-contrib-connect和grunt-connect-proxy搭建前后端分离的开发环境
前后端分离这个词一点都不新鲜,完全的前后端分离在岗位协作方面,前端不写任何后台,后台不写任何页面,双方通过接口传递数据完成软件的各个功能实现.此种情况下,前后端的项目都独立开发和独立部署,在开发期间有 ...
- List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac
List多个字段标识过滤 class Program{ public static void Main(string[] args) { List<T> list = new List& ...
- 【手摸手,带你搭建前后端分离商城系统】01 搭建基本代码框架、生成一个基本API
[手摸手,带你搭建前后端分离商城系统]01 搭建基本代码框架.生成一个基本API 通过本教程的学习,将带你从零搭建一个商城系统. 当然,这个商城涵盖了很多流行的知识点和技术核心 我可以学习到什么? S ...
- GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频)
GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频) GraphQL + React Apoll ...
- 【手摸手,带你搭建前后端分离商城系统】02 VUE-CLI 脚手架生成基本项目,axios配置请求、解决跨域问题
[手摸手,带你搭建前后端分离商城系统]02 VUE-CLI 脚手架生成基本项目,axios配置请求.解决跨域问题. 回顾一下上一节我们学习到的内容.已经将一个 usm_admin 后台用户 表的基本增 ...
- 【手摸手,带你搭建前后端分离商城系统】03 整合Spring Security token 实现方案,完成主业务登录
[手摸手,带你搭建前后端分离商城系统]03 整合Spring Security token 实现方案,完成主业务登录 上节里面,我们已经将基本的前端 VUE + Element UI 整合到了一起.并 ...
- ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目
一.前言 这几年前端的发展速度就像坐上了火箭,各种的框架一个接一个的出现,需要学习的东西越来越多,分工也越来越细,作为一个 .NET Web 程序猿,多了解了解行业的发展,让自己扩展出新的技能树,对自 ...
- python drf+xadmin+react+dva+react-native+sentry+nginx 搭建前后端分离的博客完整平台
前言: 经过差不多半年的开发,搭建从前端到服务器,实现了前后端分离的一个集PC端.移动端的多端应用,实属不易,今天得空,好好写篇文章,记录这些天的成果.同时也做个分享. 演示网站地址: http:// ...
- 巨蟒python全栈开发flask8 MongoDB回顾 前后端分离之H5&pycharm&夜神
1.MongoDB回顾 .启动 mongod - 改变data/db位置: --dbpath D:\data\db mongod --install 安装windows系统服务 mongod --re ...
随机推荐
- 网络流24题——圆桌问题 luogu 3254
题目传送门:这里 这是网络流24题里最简单的一道,我们从这里开始 虽然是网络流24题之一,但可以不用网络流... 本题采用贪心即可 有一个很显然的思想:在分配每一组时,我们都应当优先分配给当前可容纳人 ...
- vue-cli 打包编译 -webkit-box-orient: vertical 被删除解决办法
前言 -webkit-box-orient: vertical在本地开发环境运行都没问题,一旦打包以后就会丢失 正文 原因: -webkit-box-orient: vertical 这个属性被 o ...
- Redis在CentOS和Windows安装过程
redis是一种key-value高效的内存数据库. key-value是什么?json懂吧?字典懂吧?这些都是key-value结构的数据,每个key对应1个value. 那这个数据库和我们网站在使 ...
- MySQL和B树的那些事
一.零铺垫 在介绍B树之前,先来看另一棵神奇的树——二叉排序树(Binary Sort Tree),首先它是一棵树,“二叉”这个描述已经很明显了,就是树上的一根树枝开两个叉,于是递归下来就是二叉树了( ...
- ionic 3 热更新 Hot Code Push
最近用ionic 3 做的app业务做的差不多了,突然想到以后app如果有更新该怎么搞?想到我们的app后期更新应该不大,,最多就是改改bug和增加下用户体验,如果只有一些小的更新,然后提交各个应用商 ...
- CodeForces 286E Ladies' Shop 多项式 FFT
原文链接http://www.cnblogs.com/zhouzhendong/p/8781889.html 题目传送门 - CodeForces 286E 题意 首先,给你$n$个数(并告诉你$m$ ...
- UOJ#276. 【清华集训2016】汽水 二分答案 点分治
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ276.html 题解 首先,读入的时候就将所有的 $w_i$ 减掉 $k$ . 于是我们要求的就是平均值最 ...
- Java 基础 Java平台的3个版本
Java平台有3个版本:适用于小型设备和智能卡的JavaME(Java Platform Micro Edition,Java微型版).适用于桌面系统的JavaSE(Java Platform Sta ...
- 操作mysql(import pymysql模块)
pymysql模块 import pymysql #1.连上数据库.账号.密码.ip.端口号.数据库 #2.建立游标 #3.执行sql #4.获取结果 #5.关闭游标 #6.连接关闭 #charest ...
- VS2008,System.Runtime.InteropServices.COMException (0x800401F3): Invalid class string (Exception from HRESULT: 0x800401F3 (CO_E_CLASSSTRING))
在VS2008环境中编译调试运行不报错,但在发布的exe文件运行就报错 System.Runtime.InteropServices.COMException (0x800401F3): Invali ...