随着网络时代的快速发展,前端开发不仅仅是做出漂亮的页面就可以了,还要会一点后端语言,那么后端语言有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. Single-stack real-time operating system for embedded systems

    A real time operating system (RTOS) for embedded controllers having limited memory includes a contin ...

  2. 【翻译自mos文章】对于每个文件的 file.id and file.incarnation number,重命名文件别名

    对于每个文件的 file.id and file.incarnation number,重命名文件别名 參考原文: Rename Alias of Datafile as Per file.id an ...

  3. CMMI能力成熟度模型集成的过程域

    什么是CMMI CMMI全称是Capability Maturity Model Integration, 即能力成熟度模型集成,是由美国国防部(Office of the Secretary of ...

  4. cocos2dx 2.2.3 xcode5.0,新mac项目错误

    cocos2dx 2.2.3 xcode5.0,新建mac项目报错 Undefined symbols for architecture x86_64:   "cocos2d::extens ...

  5. Rust 2017 调查报告:学习曲线是最大痛点(最大的问题是这门语言太偏底层了,现在做底层的少了。还有C这个绕不过去的存在)

    Rust 官方在社区上做了一次调查,以了解用户如何看待 Rust 的发展.调查共收到 5368 份回复,其中有 大约 2/3 的是 Rust 用户,剩下的 1/3 是非 Rust 用户,调查结果如下. ...

  6. JS加载&解析XML文件,浏览器兼容

    #  JS加载XML,浏览器之间有差异,代码如下 this.createXMLDom = function() { var xmldoc; var xmlFile = "XXXXXXXXX. ...

  7. IOS开发之把 JSON 数据转化成 Arrays 或者 Dictionaries

    1 前言通过 NSJSONSerialization 这个类的 JSONObjectWithData:options:error:方法来实现,把JSON 数据解析出来放在数据或者字典里面保存. 2 代 ...

  8. WPF DataGrid 的RowDetailsTemplate的使用

    <Window x:Class="DataGridExam.DataGridRowDetailsExam"        xmlns="http://schemas ...

  9. WPF DataTemplateSelector的使用

    <Window x:Class="CollectionBinding.MainWindow"        xmlns="http://schemas.micros ...

  10. C# WebBrowser的使用

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...