亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

node通過(guò)express搭建自己的服務(wù)器

 更新時(shí)間:2017年09月30日 10:18:01   作者:不止前端  
本篇文章主要介紹了node通過(guò)express搭建自己的服務(wù)器 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

前言

為了模擬項(xiàng)目上線,我們就需要一個(gè)服務(wù)器去提供API給我們調(diào)用數(shù)據(jù)。這次我采用express框架去寫(xiě)API接口。所有請(qǐng)求都是通過(guò)ajax請(qǐng)求去請(qǐng)求服務(wù)器來(lái)返回?cái)?shù)據(jù)。第一次用node寫(xiě)后端,基本就是摸著石頭的過(guò)河,文中有什么不足不處歡迎指出。

安裝express框架

傳送門: express官方

然后介紹一下需要引入的中間件,node本身提供了一些庫(kù)。我們可以直接通過(guò)require去引用,對(duì)于未提供的庫(kù),我們也可以通過(guò)手動(dòng)npm去安裝

var fs = require('fs'); 操作文件模塊
var http = require('http'); http模塊
var url = require('url');  獲取url信息模塊
var qs = require('querystring'); 處理url參數(shù)模塊
var path = require('path'); 文件路徑模塊
var bodyParser = require('body-parser'); 請(qǐng)求體對(duì)象化 (必須)否則后臺(tái)無(wú)法解析前端發(fā)送的body內(nèi)容

接下來(lái)直接啟用模塊

app.use(bodyParser.json());

// 訪問(wèn)靜態(tài)資源文件 這里是訪問(wèn)所有dist目錄下的靜態(tài)資源文件
app.use(express.static(path.resolve(__dirname, '../dist')))
app.use(express.static('public'));

// 因?yàn)槭菃雾?yè)應(yīng)用 所有請(qǐng)求都走/dist/index.html
app.get('/', function(req, res) {
 const html = fs.readFile(path.resolve(__dirname, '../dist/index.html'), 'utf-8');
 res.send(html)
});

//處理請(qǐng)求跨域

app.all('*', function(req, res, next) {
 res.header("Access-Control-Allow-Origin", "*");
 res.header("Access-Control-Allow-Headers", "X-Requested-With");
 res.header("Content-Type", "application/json;charset=utf-8");
 res.header("Access-Control-Allow-Headers", "content-type");
 next();
});

準(zhǔn)備工作做完可以開(kāi)始動(dòng)手寫(xiě)接口了。關(guān)于數(shù)據(jù)庫(kù)可以模擬一個(gè)json,也可以真實(shí)模擬上線數(shù)據(jù)庫(kù)。

下面會(huì)劃成3塊說(shuō)明——數(shù)據(jù)庫(kù)的對(duì)接、請(qǐng)求的操作、文件請(qǐng)求的操作。

數(shù)據(jù)庫(kù)連接

這里我假設(shè)你已經(jīng)安裝了mongodb數(shù)據(jù)庫(kù)并成功啟用。仔細(xì)閱讀express教程你會(huì)發(fā)現(xiàn)框架提供了對(duì)mongodb的支持,mongodb有非常多的擴(kuò)展插件去使用該數(shù)據(jù)庫(kù) 比如mongoose。這里我們使用express官方提供的mongoskin來(lái)鏈接數(shù)據(jù)庫(kù)。

$ npm install mongoskin

#####官方實(shí)例

var db = require('mongoskin').db('localhost:27017/animals');

db.collection('mamals').find().toArray(function(err, result) {
 if (err) throw err;
 console.log(result);
});

安裝成功后 ,我們就首先把使用的數(shù)據(jù)庫(kù)引入,代碼如下

var db = require('mongoskin').db('mongodb://localhost:27017/blog');
var ObjectId = require('mongodb').ObjectID;

以上代碼表示我們成功連接了blog數(shù)據(jù)庫(kù)并且啟用了私有ID,objectID是mongodb生成數(shù)據(jù)自動(dòng)添加的ID??梢灾苯幽脕?lái)用。到這里數(shù)據(jù)庫(kù)和服務(wù)器就已經(jīng)對(duì)接完畢了。

對(duì)前端發(fā)送的請(qǐng)求進(jìn)行處理

處理get請(qǐng)求

/**
 * 獲取文章信息
 */
app.get('/article/info', function (req, res) {
 >>> 獲取請(qǐng)求參數(shù)
 var arg = qs.parse(url.parse(req.url).query);
 var id = arg.id;
 >>> 鏈接數(shù)據(jù)庫(kù)根據(jù)參數(shù)查找文檔并返回
 db.collection('articleList').find({ "_id": ObjectId(id)}).toArray(function(err, result) {
  if (err) throw err;
  console.log(result)
  res.end(JSON.stringify(result))
 });
});

以上代碼就實(shí)現(xiàn)了對(duì)一個(gè)get請(qǐng)求的處理,通過(guò)參數(shù)模塊獲取了url的參數(shù),db也就是已經(jīng)連接的數(shù)據(jù)庫(kù)。根據(jù)ID對(duì)‘a(chǎn)rticleList'的數(shù)據(jù)表進(jìn)行搜索,處理完畢后 通過(guò)res.end()返回?cái)?shù)據(jù)結(jié)束響應(yīng)。

處理post請(qǐng)求

/**
 * 提交留言信息
 */
app.post('/board/post', function (req, res) {
 >>>> 獲取請(qǐng)求參數(shù)
 var data = {
  date: req.body.date,
  name: req.body.name,
  content: req.body.content,
  time: req.body.time,
  position: req.body.position
 };
 
 >>> 鏈接數(shù)據(jù)庫(kù)并插入數(shù)據(jù)
 
 db.collection('board').insert(data, function(err, result) {
  if(err) {
   res.end('Error:'+ err)
  }
  res.end('提交成功')
 });
});

post請(qǐng)求的參數(shù)獲取和get不同 可以直接通過(guò)req.body去獲取前端傳輸?shù)恼?qǐng)求體。通過(guò)js對(duì)象的方式去獲取參數(shù)。然后根據(jù)參數(shù)執(zhí)行數(shù)據(jù)庫(kù)操作。到此,基本的請(qǐng)求也就介紹完畢了。下面說(shuō)下怎么處理圖片的上傳此類常見(jiàn)的文件操作需求。

對(duì)前端的文件請(qǐng)求進(jìn)行處理

為了簡(jiǎn)化操作,我們可以引入multer模塊來(lái)處理文件,代碼如下

var multer = require('multer');
var storage = multer.diskStorage({
 //設(shè)置上傳后文件路徑,uploads文件夾會(huì)自動(dòng)創(chuàng)建。
 destination: function (req, file, cb) {
  cb(null, './public/uploads')
 },
 //給上傳文件重命名,獲取添加后綴名
 filename: function (req, file, cb) {
  var fileFormat = (file.originalname).split(".");
  cb(null, file.fieldname + '-' + Date.now() + "." + fileFormat[fileFormat.length - 1]);
 }
});
//生成上傳模塊,讓API調(diào)用
var upload = multer({
 storage: storage
}).single('file');

以上代碼就成功引入了文件上傳模塊,通過(guò)該模塊我們可以快速生成相應(yīng)內(nèi)容,具體使用方法可以查看官方文檔。準(zhǔn)備工作完成后,在項(xiàng)目中使用:

/**
 * 圖片上傳
 */
app.post('/upload', function (req, res) {
 upload(req, res, function (err) {
  if (err) {
   console.log(err)
   return
  }
  console.log(req.file)
  res.end(JSON.stringify(req.file))
 })
});

//圖片上傳到服務(wù)器 ,向客戶端返回文件信息
  比如文件的存儲(chǔ)位置,之后就可以通過(guò)地址訪問(wèn)服務(wù)器的圖片

/**
 * 圖片刪除
 */
app.post('/image/delete', function (req, res) {
 fs.unlink(req.body.path, function(err) {
  if (err) {
   return console.error(err);
  }
  res.end("文件刪除成功!");
 });
});

這里上傳圖片我們就直接使用了直接之前已經(jīng)寫(xiě)好的upload模塊,當(dāng)該接口請(qǐng)求成功時(shí) ,文件就已經(jīng)上傳成功了,如果你需要一個(gè)預(yù)覽過(guò)程,那不應(yīng)該直接調(diào)用上傳接口 。通過(guò)原生node fs模塊 我們也能對(duì)添加的文件進(jìn)行刪除,修改操作。

上線以及上線后遇到的history模式的刷新問(wèn)題

上線過(guò)程我們可以當(dāng)作就是換一臺(tái)電腦跑程序,這里我用的是阿里云的服務(wù)器。在云服務(wù)器安裝好環(huán)境好,把項(xiàng)目克隆進(jìn)去 ,再裝個(gè)forever之類的永久運(yùn)行庫(kù),start ~ok 這樣你的項(xiàng)目就永遠(yuǎn)在運(yùn)行了。如果需要www訪問(wèn) ,還需要買個(gè)dns解析 和域名,指向你的服務(wù)器。

以上我們?nèi)绻诒镜嘏茼?xiàng)目基本已經(jīng)可以沒(méi)問(wèn)題。但項(xiàng)目上線后一刷新。啊啦??404什么鬼?打開(kāi)百度一查。那爐火多~~當(dāng)前端啟用hisory模式,后臺(tái)也必須開(kāi)啟對(duì)history的支持。express 環(huán)境如下:

var history = require('connect-history-api-fallback');
var connect = require('connect');
///////
app.use(history());

更新代碼刷新~OK 完美!

總結(jié)

想學(xué)好一樣?xùn)|西,需要長(zhǎng)久的積累。作為一個(gè)前端,一些服務(wù)器數(shù)據(jù)庫(kù)的知識(shí)除了可以幫助我們更好的跟兄弟(后端)交流,對(duì)前端來(lái)說(shuō)也是如魚(yú)得水一般的存在。

下一篇文章準(zhǔn)備寫(xiě)electron入門,electron是通過(guò)js構(gòu)建桌面應(yīng)用的框架,。共勉~~~~~

Github:https://github.com/xu455255849/myBlog

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • NestJS實(shí)現(xiàn)接口的多版本管理

    NestJS實(shí)現(xiàn)接口的多版本管理

    在軟件開(kāi)發(fā)中,隨著應(yīng)用的迭代更新,經(jīng)常需要引入新的接口版本同時(shí)保留舊版本以保證向后兼容,本教程將通過(guò) NestJS 框架演示如何實(shí)現(xiàn)接口的多版本管理,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-06-06
  • 基于node下的http小爬蟲(chóng)的示例代碼

    基于node下的http小爬蟲(chóng)的示例代碼

    本篇文章主要介紹了基于node下的http小爬蟲(chóng)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • node如何將package.json中的包降為低版本或者升級(jí)為高版本

    node如何將package.json中的包降為低版本或者升級(jí)為高版本

    比如現(xiàn)在你用某個(gè)包的當(dāng)前版本,但是你安裝的版本高了,那么你應(yīng)該這么做,首先刪除node項(xiàng)目中的node_modules目錄,防止安裝時(shí)的包不一致,下面給大家介紹node將package.json中的包降為低版本或者升級(jí)為高版本的方法,感興趣的朋友一起看看吧
    2023-11-11
  • nodejs中密碼加密處理操作詳解

    nodejs中密碼加密處理操作詳解

    這篇文章主要介紹了nodejs中密碼加密處理操作,結(jié)合實(shí)例形式分析了nodejs針對(duì)用戶登陸密碼的加密處理操作相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-03-03
  • node以及npm版本不對(duì)應(yīng)出錯(cuò)的完美解決方法

    node以及npm版本不對(duì)應(yīng)出錯(cuò)的完美解決方法

    最近項(xiàng)目用到了node和npm,查看一下當(dāng)前版本,發(fā)現(xiàn)有報(bào)錯(cuò),下面這篇文章主要給大家介紹了關(guān)于node以及npm版本不對(duì)應(yīng)出錯(cuò)的完美解決方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 通過(guò)NodeJS輕松使用GRPC和協(xié)議緩沖區(qū)的方法

    通過(guò)NodeJS輕松使用GRPC和協(xié)議緩沖區(qū)的方法

    本文介紹了GRPC和協(xié)議緩沖區(qū)的基本概念,并展示了如何在NodeJS應(yīng)用程序中使用它們,GRPC是一個(gè)高性能RPC框架,協(xié)議緩沖區(qū)則用于定義服務(wù)和序列化消息,本文給大家介紹如何在NodeJS應(yīng)用程序中使用GRPC和協(xié)議緩沖區(qū),感興趣的朋友一起看看吧
    2024-10-10
  • 使用Jasmine和Karma對(duì)AngularJS頁(yè)面程序進(jìn)行測(cè)試

    使用Jasmine和Karma對(duì)AngularJS頁(yè)面程序進(jìn)行測(cè)試

    這篇文章主要介紹了使用Jasmine和Karma對(duì)AngularJS頁(yè)面程序進(jìn)行測(cè)試的方法,以Node.js為環(huán)境,非常適合JavaScript的全棧開(kāi)發(fā)時(shí)使用,需要的朋友可以參考下
    2016-03-03
  • 詳解利用nodejs對(duì)本地json文件進(jìn)行增刪改查

    詳解利用nodejs對(duì)本地json文件進(jìn)行增刪改查

    這篇文章主要介紹了詳解利用nodejs對(duì)本地json文件進(jìn)行增刪改查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 基于node.js之調(diào)試器詳解

    基于node.js之調(diào)試器詳解

    下面小編就為大家?guī)?lái)一篇基于node.js之調(diào)試器詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • nodejs中解決異步嵌套循環(huán)和循環(huán)嵌套異步的問(wèn)題

    nodejs中解決異步嵌套循環(huán)和循環(huán)嵌套異步的問(wèn)題

    本篇文章主要介紹了nodejs中解決異步嵌套循環(huán)和循環(huán)嵌套異步的問(wèn)題,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07

最新評(píng)論