有很多关于JavaScript函数编程理论的好文章.有些甚至包含代码示例,显示命令式/面向对象编程和声明式/函数式编程之间的区别.但我发现,通过简单的JavaScript代码示例,没有一个能说明如何在web应用程序中处理副作用.现实世界中的任何应用程序都无法完全避免副作用(数据库调用、登录到控制台、保存到文件、绘制到屏幕等),我很难弄清楚在实践中是如何做到的.
有一些博客文章和S/O答案(比如这个:How to perform side-effects in pure functional programming?)涉及到在现实世界中处理副作用的主题,但它们通常并不简单,不包含代码示例或其他语言(Haskell、Scala等)中的代码示例.我还没有找到Node/JavaScript的.
所以考虑到以下使用MongoDB数据库的非常简单的示例Node/Express应用程序,必须实现哪些代码更改,以使这段代码完全反映当前的JavaScript函数式编程最佳实践.尤其是在处理数据库调用的路由/函数方面.我希望你的回答能帮助我和其他人更好地理解函数式编程的"避免副作用"概念在现实世界JavaScript中的实际apply.
/*app.js*/
const express = require('express')
const app = express()
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var greetingSchema = mongoose.Schema({
greeting: String
});
var Greeting = mongoose.model('Greeting', greetingSchema);
app.get('/', function (req, res) {
Greeting.find({greeting: 'Hello World!'}, function (err, greeting){
res.send(greeting);
});
});
app.post('/', function (req, res) {
Greeting.create({greeting: 'Wasssssssssssuuuuppppp'}, function (err, greeting){
res.send(greeting);
});
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!')
})