我正在通过GCP中的Hello World app tutorial运行。而且我陷入了server.js步骤。
server.js的代码如下:
'use strict';
const mongodb = require('mongodb');
const http = require('http');
const nconf = require('nconf');
let uri = 'mongodb+srv://my_name:<mypassword>@mydatabase-clr75.gcp.mongodb.net/test?retryWrites=true&w=majority';
if (nconf.get('mongoDatabase')) {
uri = `${uri}/${nconf.get('mongoDatabase')}`;
}
console.log(uri);
mongodb.MongoClient.connect(uri, (err, db) => {
if (err) {
throw err;
}
// Create a simple little server.
http.createServer((req, res) => {
if (req.url === '/_ah/health') {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.write('OK');
res.end();
return;
}
const collection = db.collection('Messages');
var datetime = new Date();
const msg = {
msgDescription: '\nHello World received on ' + datetime
};
collection.insert(msg, (err) => {
if (err) {
throw err;
}
// push out a range
let msglist = '';
collection.find().toArray((err, data) => {
if (err) {
throw err;
}
data.forEach((msg) => {
msglist += `${msg.msgDescription}; `;
});
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.write('Messages received so far:\n');
res.end(msglist);
});
});
}).listen(process.env.PORT || 8080, () => {
console.log('started web process');
});
});
我收到如下错误:
mongodb + srv:// my_name:@ mydatabase-clr75.gcp.mongodb.net / test?retryWrites = true&w = majority /home/herboratory/node_modules/mongodb/lib/url_parser.js:19 抛出新的错误('无效的架构,预期的mongodb'); ^错误:无效的架构,预期的mongodb 在module.exports(/home/herboratory/node_modules/mongodb/lib/url_parser.js:19:11) 在连接时(/home/herboratory/node_modules/mongodb/lib/mongo_client.js:486:16) 在Function.MongoClient.connect(/home/herboratory/node_modules/mongodb/lib/mongo_client.js:250:3) 在对象。 (/home/herboratory/server.js:12:21) 在Module._compile(module.js:653:30) 在Object.Module._extensions..js(module.js:664:10) 在Module.load(module.js:566:32) 在tryModuleLoad(module.js:506:12) 在Function.Module._load(module.js:498:3) 在Function.Module.runMain(module.js:694:10)npm ERR!代码ELIFECYCLE npm ERR! errno 1 npm错误! test@1.0.0开始:
node server.js
npm ERR!退出状态1 npm ERR! npm ERR!失败于 test@1.0.0启动脚本。 npm ERR!这可能不是问题 npm。上面可能还有其他日志记录输出。 npm ERR!一种 此运行的完整日志可以在以下位置找到:npm ERR!
/home/herboratory/.npm/_logs/2019-06-26T03_58_26_823Z-debug.log
我想知道这里是在读取同一错误行的其他文章后出现格式错误,所以我尝试了'...',“ ...”,并且不带引号,但仍然出错。请指导我哪里出了问题?
除了URI之外,我还需要在代码内部进行其他修改吗?据我从指令中了解到的,我只需要插入自己的Atlas Connection字符串即可。
非常感谢。
答案 0 :(得分:0)
错误invalid schema, expected mongodb
表示您正在使用过时的节点驱动程序版本。旧的驱动程序无法解析新的mongodb+srv
URI方案。
在此票据NODE-1145的节点驱动程序版本3.0中添加了对mongodb+srv
方案的支持。
使用以下命令升级您的节点驱动程序:
$ npm install mongodb
错误会消失。
答案 1 :(得分:0)
我有同样的错误。问题出在mongoDB Atlas中,而我的应用程序中。
在mongoDB Atlas中:
我的解决方案示例:
文件.env
MONGO_URI=mongodb+srv://jmendoza:your-password@cluster0-7rxkw.mongodb.net/nodeapi?retryWrites=true&w=majority
PORT=3000
文件app.js
const express = require('express');
const morgan = require('morgan');
const dotenv = require('dotenv');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const expressValidator = require('express-validator');
const { postRoutes } = require('./routes/posts');
const app = express();
const port = process.env.PORT || 3000;
dotenv.config();
// BD
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('mongoDB, Atlas. Connected'))
.catch((err) => console.error(err));
// Middleware
app.use(morgan('dev'));
app.use(bodyParser.json());
app.use(expressValidator());
// Routes
app.use('/api/v1', postRoutes);
app.listen(port, () => {
console.log(`A NodeJS API is listining on port: ${port}`);
});
文件package.json
{
"name": "node-api",
"version": "1.0.0",
"description": "A NodeJS API",
"main": "app.js",
"scripts": {
"dev": "nodemon app.js"
},
"keywords": [
"node",
"api"
],
"author": "Jonathan Mendoza",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"express-validator": "^5.3.1",
"mongoose": "^5.9.7",
"morgan": "^1.9.1",
"nodemon": "^2.0.3"
}
}
正在运行的应用程序(控制台)
jmendoza@jmendoza-ThinkPad-T420:~/IdeaProjects/NodeJS-API-Course/Basic-Node-API$ npm run dev
> node-api@1.0.0 dev /home/jmendoza/IdeaProjects/NodeJS-API-Course/Basic-Node-API
> nodemon app.js
[nodemon] 2.0.3
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
A NodeJS API is listining on port: 3000
mongoDB, Atlas. Connected
NodeJS版本
jmendoza@jmendoza-ThinkPad-T420:~/IdeaProjects/NodeJS-API-Course/Basic-Node-API$ node -v
v13.12.0
您可以在GitHub上看到我的完整代码:
https://github.com/JonathanM2ndoza/NodeJS-API-Course/tree/master/Basic-Node-API