随着网络时代的快速发展,前端开发不仅仅是做出漂亮的页面就可以了,还要会一点后端语言,那么后端语言有Java,php,node.js最常见,那我们应该学哪一种呢,为了让我们自己更好的学习,我推荐选择node.js。

下面是我开发时做个小测试;

测试项目目录

app.js

//1, npm i express -S
//2, npm i body-parser -S
var express=require('express');
// var router = express.Router();
var app =express(); var bodyParser=require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false })); // const querystring = require("querystring"); //设置跨域访问
app.all('*', function(req, res, next) {
   res.header("Access-Control-Allow-Origin", "*");
   res.header("Access-Control-Allow-Headers", "X-Requested-With");
   res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
   res.header("X-Powered-By",' 3.2.1');
   res.header("Content-Type", "application/json;charset=utf-8");
   next();
}); //创建数据库连接对象
const mysql = require('mysql');
const conn = mysql.createConnection({
host: '127.0.0.1',//数据库地址
user: 'root',//账号
password: 'root',//密码
database: 'nodeproject',//库名
multipleStatements: true, //允许执行多条语句
timezone:"08:00"//数据库处理时间
})
//开始链接数据库
conn.connect(function(err){
if(err){
console.log(`mysql连接失败: ${err},正在重新连接!`);
// setTimeout(function(){autoConnect(connect);},2000); //2s重新连接
}else{
console.log("mysql连接成功!");
}
}); //全部列表查询
app.get('/api/getlist',function(req,res){
let sqlQuery="select * from user_info";
conn.query(sqlQuery, (err, results) => {
if (err) return res.json({ err_code: 1, message: '暂无数据', affextedRows: 0 })
res.json({ err_code: 200, message: results, affextedRows: results.affextedRows })
})
}); //按条件查询
app.get('/api/getlistdetl', (req, res) => {
const name = req.query.name
const sqlStr = 'select * from user_info where name=?'
conn.query(sqlStr, name, (err, results) => {
if (err) return res.json({ err_code: 1, message: '查无此人', affextedRows: 0 })
res.json({ err_code: 200, message: results, affextedRows: results.affextedRows })
})
}) //添加用户数据
app.post('/api/userInfo', (req, res) => {
const username = req.body.name
const age = req.body.age
const sex = req.body.sex
const addr = req.body.addr
const tel = req.body.tel
// const all=querystring.stringify({name:username,age:age,sex:sex})
// console.log(username)
// const sqlStr = 'INSERT INTO user_info SET ?'
const sqlStr = 'insert into user_info set ?'
conn.query(sqlStr, {name:username,age:age,sex:sex,addr:addr,tel:tel}, (err, results) => {
if (err) return res.json({ err_code: 1, message: err, affectedRows: 0 })
res.json({ err_code: 0, message: '添加成功', affectedRows: results.affectedRows })
}) }) //用户注册
app.post('/api/user/register',(req,res)=>{
const username=req.body.username
const password=req.body.password
const repassword = req.body.repassword
const registerDate=new Date()
// const sqlStr='INSERT INTO register SET ?'
const sqlStr='insert into register set ?'
// const sqlStr1='SELECT * FROM register WHERE username = ?'
const sqlStr1='select * from register where username = ?'
conn.query(sqlStr1,username,(err,results)=>{
if(err) return res.json({err_code:1,message:err,affectedRows:0})
// 数据不存在 就注册成功
if (results.length == 0 ) {
//判断两次密码是否一致
if(password !=repassword){
return res.json({err_code:201,message:'两次输入的密码不一致',affectedRows:0})
}
// 把新用户插入数据库
conn.query(sqlStr,{username:username,password:password,repassword:repassword,registerDate:registerDate}, (err, results)=> {
// console.log(sqlStr)
if(err){
throw err
}else{
// res.end(JSON.stringify({status:'100',msg:'注册成功!'}));
res.json({err_code:0,message:'注册成功',affectedRows:results.affectedRows})
}
})
} else{ // 数据存在就注册失败
// res.end(JSON.stringify({status:'101',msg:'该用户名已经被注册'}));
res.json({err_code:101,message:'该用户名已经被注册',affectedRows:0})
}
})
}) //用户登录
app.post('/api/user/login',(req,res)=>{
const username=req.body.username
const password=req.body.password
const sqlStr='select * from register where username=? and password=?'
conn.query(sqlStr,[username,password],(err,results)=>{
// console.log(results)
if(err) return res.json({err_code:1,message:err,affectedRows:0})
// if(null != results) return res.json({err_code:401,message:'用户不存在',affectedRows:0})
if(results.length == 0){
res.json({err_code:301,message:'用户名或密码错误',affectedRows:0})
}else{
res.json({err_code:0,message:'登录成功,正在跳转...',affectedRows:results.affectedRows,user_info:results})
}
})
}) //获取商品列表
app.get('/api/goods/goodsList',(req,res)=>{
const sqlStr='select * from goods_info'
conn.query(sqlStr,(err,results)=>{
if(err) return res.json({err_code:1,message:err,affectedRows:0})
res.json({err_code:0,message:'ok',goodsList:results})
})
}) //获取订单信息
app.get('/api/order/order_info',(req,res)=>{
const sqlStr='select * from order_info'
conn.query(sqlStr,(err,results)=>{
if(err) return res.json({err_code:1,message:err,affectedRows:0})
res.json({err_code:0,message:'ok',order_info:results,affectedRows:results.affectedRows})
})
}) //新订单插入数据
app.post('/api/order/into_order',(req,res)=>{
// const ordernum=req.body.ordernum
const ordernum=new Date().getTime()+req.body.customerid
const goodsname=req.body.goodsname
const orderdate=new Date()
const customerid=req.body.customerid
const flownumber=new Date().getTime()
const sqlStr='insert into order_info set ?'
conn.query(sqlStr,{ordernum:ordernum,goodsname:goodsname,orderdate:orderdate,customerid:customerid,flownumber:flownumber},(err,results)=>{
if(err) return res.json({err_code:1,message:err,affectedRows:0})
res.json({err_code:0,message:'下单成功',affectedRows:results.affectedRows})
})
}) //成功接单
// app.post('/api/order/success',(req,res)=>{
// const status=req.body.status
// const sqlStr='update order_info set status=1 where status=0'
// conn.query(sqlStr,{status:status},(err,results)=>{
// if(err) return res.json({err_code:1,message,err,affectedRows:0})
// res.json({err_code:0,message:'接单成功',affectedRows:results.affectedRows})
// })
// }) /*
时间格式化
*/
Date.prototype.Format = function (fmt) { //author: meizz
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"h+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
} //配置服务端口 var server = app.listen(3002, function () { var host = server.address().address; var port = server.address().port;     console.log('Example app listening at http://localhost', host, port);
})

项目源码:https://github.com/DreamS001/nodeProject.git

 

node.js简单数据接口开发的更多相关文章

  1. 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想

    总体介绍 <Node.js+MongoDB+AngularJS Web开发>,于2015年6月出版,是一本翻译过来的书,原书名为<Node.js,MongoDB and Angula ...

  2. React-Native 获取node.js提供的接口

    一个简单的React-Native 获取node.js提供的接口的实现 一.node.js var http = require("http"); var url = requir ...

  3. python的flex服务端数据接口开发

    python的flex服务端数据接口开发 python 如果给flex提供服务端,需要提供一个网关和一个可供客户端(flex)调用的类.这方面我更加推荐用twisted来写这个网关,因为twisted ...

  4. Node.js简单介绍并实现一个简单的Web MVC框架

    编号:1018时间:2016年6月13日16:06:41功能:Node.js简单介绍并实现一个简单的Web MVC框架URL :https://cnodejs.org/topic/4f16442cca ...

  5. Node.js 命令行程序开发资料

    Node.js 命令行程序开发教程http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html用Node.js创建命令行工具ht ...

  6. 使用Node.js实现数据推送

    业务场景:后端更新数据推送到客户端(Java部分使用Tomcat服务器). 后端推送数据的解决方案有很多,比如轮询.Comet.WebSocket. 1. 轮询对于后端来说开发成本最低,就是按照传统的 ...

  7. [Node.js框架] 为什么要开发 Codekart 框架

    两年前,在被php的$符号和字符串处理折磨得半夜骂娘之后,我义无反顾地决定:珍爱生命,远离php. 之后一直在寻找一门“完美的语言”,先后接触了Lisp.python.java.Ruby.Lisp几乎 ...

  8. node.js适合游戏后台开发吗?

    网站服务器和游戏服务器是怎么样联系到一起的? 百牛信息技术bainiu.ltd整理发布于博客园 1. 游戏分很多种,咱们先来看看MMORPG. 再怎么简单的RPG服务器都免不了处理多人交互的情形,上百 ...

  9. 使用Node.js搭建数据爬虫crawler

    0. 通用爬虫框架包括: (1) 将爬取url加入队列,并获取指定url的前端资源(crawler爬虫框架主要使用Crawler类进行抓取网页) (2)解析前端资源,获取指定所需字段的值,即获取有价值 ...

随机推荐

  1. 使用带ParserContext参数的Xaml.Load方法

    原文:使用带ParserContext参数的Xaml.Load方法 如果一段XAML中存在一个标记需要从外部命名空间中解析, 就需要用到ParserContext类,  具体用法如下: Normal ...

  2. Java Swing界面编程(29)---JCheckBox事件处理

    JCheckBox和JRadioButton的事件处理监听接口是一样的,都是使用ItemListener接口. package com.beyole.util; import java.awt.Con ...

  3. RTB业务知识2-Open-RTB全景

    一个.前言 openrtb这是一套开源的竞价广告系统,来自IAB贡献,井. 有许多值太借鉴,提供sdk api接口文档介绍,整理了相关的资料.主要包含其生态图体系.业务流程和基本的对象模型和数据模型. ...

  4. OpenSSL RSA加解密 (.Net公钥加密/ Linux端私钥解密)

    要求在.Net端生成公钥私钥对. 然后在.Net端使用RSA公钥加密:在Linux端使用RSA私钥解密. 最初的尝试是:.Net端使用RSACryptoServiceProvider; linux端使 ...

  5. MIS的趋势必定是围绕机器取代人手,分工越来越细(小餐厅都支持微信自助点餐,结账时就打个折,相当于省了1、2个人手,SQL发明以后,程序员的工作更多了)

    最后,我还想简略的谈谈MIS及MIS快速开发工具的未来. MIS的趋势必定是围绕机器取代人手,分工越来越细.比如:现在有些小型的咖啡厅里的财务子系统就简单到不需要使用者有会计知识,相当于省了会计人手: ...

  6. VS发布到IIS Express外网Debug(如微信开发)

    主要效果是本机调试网站,将网站发布到某域名(如m16758r728.iok.la),可以进入VS断点,不必再用远程调试!!! 环境 VS2015windows 10操作系统花生壳(可以用其他内网穿透的 ...

  7. jquery each()的用法--遍历键值对

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  8. 通通WPF随笔(3)——艺术二维码素材生成器

    原文:通通WPF随笔(3)--艺术二维码素材生成器 最近公司让我开发一个条形码的生成控件,花了半天时间搞定觉得不过瘾,什么年代了该用二维码了吧.于是wiki了一下二维码的资料. 比较常见的就是QR码( ...

  9. jquery获取选中的值和设置单选扭选中

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  10. 毕业设计之感悟 —— UML 与 ER 图

    今天毕业设计答辩,虽然我第一个上场,但是不是特别紧张,因为整个系统都是我写的.我以为自己天衣无缝,能应付所有老师的所有问题.事实上,我被老师教育了一番. 老师说我,毕业论文中没有一个类.我一开始比较懵 ...