【发布时间】:2020-06-13 16:10:41
【问题描述】:
我是 MongoDB 和 NodeJS 的新手。我写了一个简单的应用程序来测试 RESTFUL 状态 API 的写入速度:
const express = require('express')
const port = process.env.PORT
var MongoClient = require('mongodb').MongoClient;
const router = express.Router()
router.post('/mongo-log', async(req, res) => {
try {
let syserr = false;
let e = null;
await MongoClient.connect(process.env.MONGODB_URL,async function(err,db) {
if(err)
{
console.log("-------------CONNECT ERROR----------");
console.log(err);
process.exit(1);
}
const dbo = db.db(process.env.MONGODB_NAME);
await dbo.collection("mongolog").insertOne({details:req.body.details,createDate:(new Date())},function(err,res) {
if(err)
{
console.log("-------------INSERT ERROR----------");
console.log(err);
process.exit(1);
}
});
});
if(e) throw e;
res.status(201).send({"success":true})
} catch (error) {
console.log(error);
res.status(400).send(error)
}
})
var cors = require('cors')
const app = express()
app.use(cors())
app.use(express.json())
app.use(router)
if(process.env.SSL_KEY && process.env.SSL_CRT) {
const https = require('https')
const fs = require('fs')
const options = {
key: fs.readFileSync(process.env.SSL_KEY),
cert: fs.readFileSync(process.env.SSL_CRT)
}
var server = https.createServer(options, app)
server.listen(port, () => {
console.log("server starting on port : " + port)
})
} else {
app.listen(port, () => {
console.log(`Server running on port ${port}`)
})
}
我从终端使用npm start 启动应用程序。然后我编写了一个单独的 python 脚本,它有一个无限的 while 循环,没有任何休眠/超时,只提交 {details:{a bunch of nested objects}} 和 request.post()。
在几秒钟内一切正常。但是,当我的 API 准确地将 1084 条记录写入 mongodb 时,我从上面的一个 if 语句中得到以下错误:
----------连接错误----------
MongoNetworkError:无法连接到服务器 [127.0.0.1:27017] 首先连接[错误:写EPIPE 在 afterWriteDispatched (internal/stream_base_commons.js:150:25) 在 writeGeneric (internal/stream_base_commons.js:141:3) 在 Socket._writeGeneric (net.js:776:11) 在 Socket._write (net.js:788:8) 在 doWrite (_stream_writable.js:453:12) 在 writeOrBuffer (_stream_writable.js:435:5) 在 Socket.Writable.write (_stream_writable.js:315:11) 在 Connection.write (/home/john/projects/dbperformance/node_modules/mongodb/lib/core/connection/connection.js:271:21) 在 runCommand (/home/john/projects/dbperformance/node_modules/mongodb/lib/core/connection/connect.js:384:8) 在 performInitialHandshake (/home/john/projects/dbperformance/node_modules/mongodb/lib/core/connection/connect.js:122:3) {名称:'MongoNetworkError',[符号(mongoErrorContextSymbol)]:{} }] 在游泳池。 (/home/john/projects/dbperformance/node_modules/mongodb/lib/core/topologies/server.js:438:11) 在 Pool.emit (events.js:210:5) 在/home/john/projects/dbperformance/node_modules/mongodb/lib/core/connection/pool.js:561:14 在/home/john/projects/dbperformance/node_modules/mongodb/lib/core/connection/pool.js:994:11 在回调(/home/john/projects/dbperformance/node_modules/mongodb/lib/core/connection/connect.js:97:5) 在/home/john/projects/dbperformance/node_modules/mongodb/lib/core/connection/connect.js:124:7 在 _callback (/home/john/projects/dbperformance/node_modules/mongodb/lib/core/connection/connect.js:349:5) 在 Connection.errorHandler (/home/john/projects/dbperformance/node_modules/mongodb/lib/core/connection/connect.js:365:5) 在 Object.onceWrapper (events.js:300:26) 在 Connection.emit (events.js:210:5) { name: 'MongoNetworkError', [Symbol(mongoErrorContextSymbol)]: {}
为什么我在每 1084 条记录后不断收到错误消息?
【问题讨论】: