????今天在做一個(gè)需要快速開(kāi)發(fā)完成的Web端的Demo演示程序只磷,需要若干個(gè)支撐的后端接口,返回一些簡(jiǎn)單的演示數(shù)據(jù)泌绣。由于本人在后端方面較為薄弱钮追,并且前端開(kāi)發(fā)較熟練,對(duì)JavaScript了解較多阿迈,所以計(jì)劃學(xué)習(xí)使用node.js構(gòu)建一個(gè)簡(jiǎn)單的后端元媚,參考了一些博客中的技術(shù)分享,終于成功,在此記錄一下碰到的一些問(wèn)題及解決方法刊棕。
參考的博客:https://blog.csdn.net/piratest/article/details/54584182??Node.js學(xué)習(xí)--搭建一個(gè)簡(jiǎn)單的帶有g(shù)et/post接口的服務(wù)——海盜roby炭晒;
https://www.jb51.net/article/105408.htm??基于node.js依賴express解析post請(qǐng)求四種數(shù)據(jù)格式——Sherlock_H
對(duì)上述各位大牛表示感謝!
? ? 首先保證電腦具備node.js環(huán)境甥角,新建文件夾网严,并在文件夾中編寫并保存package.json文件,命令行cd至新建的文件夾目錄蜈膨,運(yùn)行“npm install”命令屿笼,系統(tǒng)將自動(dòng)下載package.json中提到的依賴庫(kù),包括express框架翁巍,body-parser等驴一。package.json的文件內(nèi)容如下:
{
????"name": "Express_Server_Demo",
????"version": "1.0.0",
????"description": "demo on express",
????"main": "expressServer.js",
????"scripts": {
????????"start": "node expressServer.js",
????????"lint": "jshint --exclude node_modules .",
????????"test": "echo \"Error: no test specified\" && exit 1"
????},
????"repository": { },
????"author": "djg",
????"license": "ISC",
????"dependencies": {
????????"body-parser": "^1.15.2",
????????"express": "^4.14.0"
????},
????"engines": {
????????"node": "~6.9.3"
????}
}
其中engines根據(jù)本人的機(jī)器上node環(huán)境的版本進(jìn)行填寫。
? ? 接下來(lái)就是編寫實(shí)際需要的后端服務(wù)代碼了灶壶,新建一個(gè)“expressServer.js”文件肝断,在此文件中編寫所需的get、post等接口的具體內(nèi)容驰凛,編寫好以后胸懈,在程序目錄下運(yùn)行“node .”命令即可啟動(dòng)后端服務(wù)程序,可通過(guò)postman軟件進(jìn)行接口的訪問(wèn)測(cè)試了恰响。
? ? 在開(kāi)發(fā)過(guò)程中遇到過(guò)的問(wèn)題:最開(kāi)始參考的代碼中趣钱,對(duì)post接口提交的數(shù)據(jù)解析部分寫法是“var urlencodedParser = bodyParser.urlencoded({ extended: false })”,并將urlencodedParser作為app.post的第二個(gè)參數(shù)胚宦,多次試驗(yàn)均無(wú)法獲得提交的參數(shù)信息首有,后來(lái)查到這種寫法是針對(duì)提交參數(shù)是application/x-www-form-urlencoded格式的,而我常用的提交參數(shù)格式是application/json枢劝,因此在數(shù)據(jù)解析部分需寫為“app.use(bodyParser.json());”井联。這樣就可以正確解析提交的application/json格式參數(shù)了。
? ? 另外示例后端服務(wù)代碼由于與前端程序端口不一致您旁,出現(xiàn)了跨域的問(wèn)題烙常,我采用了nginx代理的方式統(tǒng)一了前后端的域名和端口,后續(xù)再查詢是否有更優(yōu)的解決方法鹤盒。
expressServer.js示例代碼如下:
var express = require('express');//引入express框架蚕脏,通過(guò)此框架快速開(kāi)發(fā)get/post接口
var bodyParser = require('body-parser');//引入body-parser中間件,用于解析接口request中提交的參數(shù)
var app = express();
app.get('/get', function(request, response){? //編寫get接口
????????// 輸出 JSON 格式
????????data = { 'name':'abc', 'value':'123' };
????????console.log(data);
????????// response.end(JSON.stringify(data));
????????response.json(data);
????}
);
app.use(bodyParser.json());? //添加bodyParser中間件昨悼,通過(guò)這一命令可實(shí)現(xiàn)對(duì)?post中提交的application/json數(shù)據(jù)格式參數(shù)進(jìn)行解析
app.post('/post',function(request,response){
????????var name=request.body.name;
????????var data={ "success":true, "data": { "name":"requestName", "value":name } };
????????response.json(data);
????}
);
var server = app.listen(8989, function(){
????????var host = server.address().address;
????????var port = server.address().port;
????????console.log("address: %s, port: %d", host, port);
????}
);??