node.js - 使用 nodejs 处理 mongoDB 的问题(使用 express 和车把)
问题描述
给出的是:
/routes/index.js
var express = require('express');
var router = express.Router();
//var mongo = require('mongodb').MongoClient;
//var objectId = require('mongodb').ObjectID;
var mongo = require('mongodb');
var assert = require('assert');
var url = 'mongodb://localhost:27017/test';
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index');
});
router.post('/insert', function(req, res, next) {
var item = {
title: req.body.title,
content: req.body.content,
author: req.body.author
};
mongo.connect(url, function(err, db) {
assert.equal(null, err);
db.collection('userdata').insertOne(item, function(err, result) {
assert.equal(null, err);
console.log('Item inserted');
db.close();
});
});
res.redirect('/');
});
应用程序.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var hbs = require('express-handlebars');
var expressValidator = require('express-validator');
var expressSession = require('express-session');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.engine('hbs', hbs({extname: 'hbs', defaultLayout: 'layout', layoutsDir: __dirname + '/views/layouts/'}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public'))); eingetragen)
app.use(expressValidator());
app.use(express.static(path.join(__dirname, 'public')));
app.use(expressSession({secret: "eefa56_50cacb_34634f", saveUninitialized: false, resave: false})); // dafault storage is RAM, otherwise kann ich in der API von express-session rumwühlen, da der storage serverseitig in einer DB erfolgt
app.use('/', indexRouter);
app.use('/users', usersRouter);
...
包.json
{
"name": "sample_express_app(POST_GET_handlebars)",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"assert": "^1.4.1",
"body-parser": "^1.18.3",
"cookie-parser": "~1.4.3",
"debug": "~2.6.9",
"express": "~4.16.0",
"express-handlenter": "^3.0.0",
"express-session": "^1.15.6",
"express-validator": "^5.3.0",
"http-errors": "~1.6.2",
"mongodb": "^3.1.4",
"morgan": "~1.9.0"
}
}
mongoDB 服务器正在运行,在 CMD 中操作数据库没有问题。它特别处理router.post('/insert' ...
在 /routes/index.js。出了点问题(但也可能在另一点上)。
我也试过这个(要么我得到错误db.collection('userdata').insert(...
--> 'db.collection is not a function'或db.userdata.insert(...
--> 'cannot read property insert'):
1)
db.runCommand({
insert: "userdata",
documents: [ item ]
}
)
2)
db.collection('userdata').insertOne(item, function(err, result) {
assert.equal(null, err);
console.log('Item inserted');
db.close();
});
3)
db.userdata.insert(item, function(err, result) {
assert.equal(null, err);
console.log('Item inserted');
db.close();
});
解决方案
本机 mongoDB 驱动程序在 MongoClient 的帮助下工作。
在 index.js 文件中进行更改
var mongo = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017';
mongo.connect(url, function(err, client) {
const db = client.db(dbName);
//your db queries
})
参考MongoDB
推荐阅读
- reactjs - 仅在 Android Pie 上出现“.map 不是函数”错误?
- c# - HTTP 500.19 – 配置数据无效
- java - POST 请求后如何在响应正文中获取特定变量
- c# - 为什么它不打印 C# 中的最后一个正则表达式组
- ios - 在VC之间进行时.reloadData()的问题
- c - 为什么 SIGINT 不止一次停止睡眠?
- r - 计算并绘制一个变量与多个变量的相关性和置信区间
- oracle - Oracle 物化视图 - 快速刷新和 WHERE
- r - y轴的值在R的部分依赖图中意味着什么?
- java-8 - 反应流在 Red Hat Fuse 7.2 中不起作用... - 搜索功能/捆绑包(即配方)以使其工作