JavaScript是現(xiàn)今使用度較高的一種編程語(yǔ)言,常常被用在前端開(kāi)發(fā)中。但是JavaScript的用途遠(yuǎn)遠(yuǎn)不止于此。本文將介紹JavaScript如何接收請(qǐng)求,具體而言,如何使用JavaScript來(lái)作為后端語(yǔ)言。
JavaScript 雖然主要是前端開(kāi)發(fā)中最流行的語(yǔ)言,不過(guò),使用Node.js后,JavaScript可以在后端服務(wù)端運(yùn)行,Node.js基于Google Chrome引擎V8,是單進(jìn)程,異步、輕量級(jí)的后端框架,使得JavaScript有了更廣泛的用處。我們先來(lái)看一個(gè)簡(jiǎn)單的例子:
```javascript
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World!');
}).listen(8080);
```
在上面這個(gè)例子中,我們使用了Node.js的http模塊創(chuàng)建了一個(gè)服務(wù)器,并且監(jiān)聽(tīng)8080端口,當(dāng)收到請(qǐng)求時(shí),最簡(jiǎn)單的響應(yīng)方式就是返回“Hello World!”。這樣,我們就成功的用JavaScript寫(xiě)了一個(gè)后端服務(wù)器。但是這只是Node.js整個(gè)后端應(yīng)用的一小部分,實(shí)際上,通過(guò)使用Express,Koa等一系列后端框架,JavaScript可以用來(lái)構(gòu)建更加復(fù)雜的Web應(yīng)用程序。
下面,讓我們來(lái)看看如何用JavaScript實(shí)現(xiàn)一個(gè)簡(jiǎn)單的后端API。
```javascript
const express = require('express')
const app = express()
const port = 3000
app.use(express.json())
app.get('/api/test', (req, res) =>{
res.json({message: 'Hello World!'})
})
app.listen(port, () =>{
console.log(`Example app listening at http://localhost:${port}`)
})
```
在這個(gè)例子中,我們使用Express構(gòu)建了一個(gè)簡(jiǎn)單的后端API,它能夠接收GET請(qǐng)求,并返回一個(gè)包含message字段的json對(duì)象。通過(guò)使用Express提供的函數(shù),我們不需要自己去處理request和response對(duì)象,而是直接傳遞給相應(yīng)的回調(diào)函數(shù),在回調(diào)函數(shù)中來(lái)處理業(yè)務(wù)邏輯的部分。當(dāng)然,如果有較為復(fù)雜的請(qǐng)求需要處理,則可以在更高級(jí)別的中間件函數(shù)中進(jìn)行。
在Express中,有一個(gè)非常重要的概念叫做中間件,在本質(zhì)上,中間件函數(shù)是將應(yīng)用程序處理過(guò)程中的請(qǐng)求和響應(yīng)對(duì)象作為參數(shù)傳遞進(jìn)來(lái),然后逐一讓這些對(duì)象經(jīng)過(guò)特定的組合和處理過(guò)程。在Express中可以通過(guò)app.use()來(lái)使用中間件函數(shù)。
```javascript
const express = require('express')
const app = express()
const port = 3000
const loggingMiddleware = (req, res, next) =>{
console.log('Incoming Request!')
next()
}
app.use(loggingMiddleware)
app.get('/api/test', (req, res) =>{
res.json({message: 'Hello World!'})
})
app.listen(port, () =>{
console.log(`Example app listening at http://localhost:${port}`)
})
```
在上面的例子中,我們創(chuàng)建了一個(gè)簡(jiǎn)單的中間件函數(shù),當(dāng)有請(qǐng)求進(jìn)來(lái)的時(shí)候,它會(huì)在控制臺(tái)輸出"Incoming Request!",然后把請(qǐng)求對(duì)象傳遞給下一個(gè)中間件函數(shù)(在這個(gè)例子里,下一個(gè)中間件函數(shù)就是處理請(qǐng)求的回調(diào)函數(shù))。這個(gè)函數(shù)可以用來(lái)記錄請(qǐng)求日志,處理請(qǐng)求頭等。
JavaScript的后端開(kāi)發(fā)可以說(shuō)是非常廣泛的,不僅僅局限于上面所提到的web應(yīng)用開(kāi)發(fā)。Node.js的package管理器npm,是全球最大的基于JavaScript的包管理器,它可以使我們方便使用其他開(kāi)發(fā)者所開(kāi)發(fā)的非常實(shí)用的模塊,此外,也可以使我們開(kāi)發(fā)出高質(zhì)量的模塊,并發(fā)布到npm的整個(gè)生態(tài)系統(tǒng)里。有了這個(gè)神奇的包管理器,我們已經(jīng)可以通過(guò)JavaScript來(lái)實(shí)現(xiàn)許多事情,比如,對(duì)MongoDB數(shù)據(jù)庫(kù)的操作,網(wǎng)絡(luò)通訊,甚至是物聯(lián)網(wǎng)的應(yīng)用。
最后,我們?cè)賮?lái)看看如何使用JavaScript來(lái)進(jìn)行MongoDB數(shù)據(jù)庫(kù)的讀寫(xiě)操作。
```javascript
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true, useUnifiedTopology: true});
var kittySchema = new mongoose.Schema({
name: String
});
kittySchema.methods.speak = function () {
var greeting = this.name
? "Meow name is " + this.name
: "I don't have a name";
console.log(greeting);
}
var Kitten = mongoose.model('Kitten', kittySchema);
var silence = new Kitten({ name: 'Silence' });
console.log(silence.name);
var fluffy = new Kitten({ name: 'fluffy' });
fluffy.speak();
fluffy.save(function (err, fluffy) {
if (err) return console.error(err);
fluffy.speak();
});
Kitten.find({}, function (err, kittens) {
if (err) return console.error(err);
console.log(kittens);
})
```
在上面的例子中,我們使用了mongoose這個(gè)模塊,來(lái)對(duì)MongoDB進(jìn)行了讀寫(xiě)操作。通過(guò)引入mongoose模塊,我們可以輕松地對(duì)MongoDB進(jìn)行增刪改查。在這個(gè)例子中,我們定義了一個(gè)Kitty數(shù)據(jù)模型,通過(guò)創(chuàng)建Kitten對(duì)象來(lái)實(shí)現(xiàn)對(duì)MongoDB的”增"操作,并且使用mongoose模塊的方法來(lái)實(shí)現(xiàn)對(duì)MongoDB的”查”操作。
總之,JavaScript的應(yīng)用范圍非常廣泛,特別是在Node.js的出現(xiàn)之后,JavaScript的后端開(kāi)發(fā)變得越來(lái)越受歡迎,我們可以用JavaScript來(lái)實(shí)現(xiàn)Web開(kāi)發(fā)中的后端部分,也可以用它實(shí)現(xiàn)其他非常實(shí)用的功能。
網(wǎng)站導(dǎo)航
- zblogPHP模板zbpkf
- zblog免費(fèi)模板zblogfree
- zblog模板學(xué)習(xí)zblogxuexi
- zblogPHP仿站zbpfang