J'essaie de créer une application de blog React simple avec MongoDB stockant les messages, mais webpack ne compilera pas lorsque j'essayerai d'importer un modèle Mongoose dans mon composant NewPost.Webpack ne compile pas lorsque j'essaie d'importer un modèle mangouste
Voici les erreurs:
WARNING in ./node_modules/mongoose/lib/drivers/index.js
10:13-49 Critical dependency: the request of a dependency is an expression
WARNING in ./node_modules/require_optional/index.js
82:18-42 Critical dependency: the request of a dependency is an expression
WARNING in ./node_modules/require_optional/index.js
90:20-44 Critical dependency: the request of a dependency is an expression
WARNING in ./node_modules/require_optional/index.js
97:35-67 Critical dependency: the request of a dependency is an expression
ERROR in ./node_modules/mongodb/lib/gridfs/grid_store.js
Module not found: Error: Can't resolve 'fs' in 'D:\mydocs\webdev\gitprojs\ReactBlogFinal\node_modules\mongodb\lib\gridfs'
@ ./node_modules/mongodb/lib/gridfs/grid_store.js 42:7-20
@ ./node_modules/mongodb/index.js
@ ./node_modules/mongoose/lib/drivers/node-mongodb-native/binary.js
@ ./node_modules/mongoose/lib/drivers/node-mongodb-native/index.js
@ ./node_modules/mongoose/lib/drivers/index.js
@ ./node_modules/mongoose/lib/schema.js
@ ./node_modules/mongoose/lib/browser.js
@ ./models/models.js
@ ./views/NewPost/NewPost.jsx
@ ./routes.jsx
@ ./index.jsx
@ multi (webpack)-dev-server/client?http://localhost:3000 webpack/hot/dev-server ./index.jsx .
ERROR in ./node_modules/mongodb-core/lib/connection/connection.js
Module not found: Error: Can't resolve 'net' in 'D:\mydocs\webdev\gitprojs\ReactBlogFinal\node_modules\mongodb-core\lib\connection'
@ ./node_modules/mongodb-core/lib/connection/connection.js 5:10-24
@ ./node_modules/mongodb-core/index.js
@ ./node_modules/mongodb/index.js
@ ./node_modules/mongoose/lib/drivers/node-mongodb-native/binary.js
@ ./node_modules/mongoose/lib/drivers/node-mongodb-native/index.js
@ ./node_modules/mongoose/lib/drivers/index.js
@ ./node_modules/mongoose/lib/schema.js
@ ./node_modules/mongoose/lib/browser.js
@ ./models/models.js
@ ./views/NewPost/NewPost.jsx
@ ./routes.jsx
@ ./index.jsx
@ multi (webpack)-dev-server/client?http://localhost:3000 webpack/hot/dev-server ./index.jsx .
ERROR in ./node_modules/mongodb-core/lib/connection/connection.js
Module not found: Error: Can't resolve 'tls' in 'D:\mydocs\webdev\gitprojs\ReactBlogFinal\node_modules\mongodb-core\lib\connection'
@ ./node_modules/mongodb-core/lib/connection/connection.js 6:10-24
@ ./node_modules/mongodb-core/index.js
@ ./node_modules/mongodb/index.js
@ ./node_modules/mongoose/lib/drivers/node-mongodb-native/binary.js
@ ./node_modules/mongoose/lib/drivers/node-mongodb-native/index.js
@ ./node_modules/mongoose/lib/drivers/index.js
@ ./node_modules/mongoose/lib/schema.js
@ ./node_modules/mongoose/lib/browser.js
@ ./models/models.js
@ ./views/NewPost/NewPost.jsx
@ ./routes.jsx
@ ./index.jsx
@ multi (webpack)-dev-server/client?http://localhost:3000 webpack/hot/dev-server ./index.jsx .
ERROR in ./node_modules/require_optional/index.js
Module not found: Error: Can't resolve 'fs' in 'D:\mydocs\webdev\gitprojs\ReactBlogFinal\node_modules\require_optional'
@ ./node_modules/require_optional/index.js 2:7-20
@ ./node_modules/mongodb-core/lib/topologies/server.js
@ ./node_modules/mongodb-core/index.js
@ ./node_modules/mongodb/index.js
@ ./node_modules/mongoose/lib/drivers/node-mongodb-native/binary.js
@ ./node_modules/mongoose/lib/drivers/node-mongodb-native/index.js
@ ./node_modules/mongoose/lib/drivers/index.js
@ ./node_modules/mongoose/lib/schema.js
@ ./node_modules/mongoose/lib/browser.js
@ ./models/models.js
@ ./views/NewPost/NewPost.jsx
@ ./routes.jsx
@ ./index.jsx
@ multi (webpack)-dev-server/client?http://localhost:3000 webpack/hot/dev-server ./index.jsx .
ERROR in ./node_modules/resolve-from/index.js
Module not found: Error: Can't resolve 'module' in 'D:\mydocs\webdev\gitprojs\ReactBlogFinal\node_modules\resolve-from'
@ ./node_modules/resolve-from/index.js 3:13-30
@ ./node_modules/require_optional/index.js
@ ./node_modules/mongodb-core/lib/topologies/server.js
@ ./node_modules/mongodb-core/index.js
@ ./node_modules/mongodb/index.js
@ ./node_modules/mongoose/lib/drivers/node-mongodb-native/binary.js
@ ./node_modules/mongoose/lib/drivers/node-mongodb-native/index.js
@ ./node_modules/mongoose/lib/drivers/index.js
@ ./node_modules/mongoose/lib/schema.js
@ ./node_modules/mongoose/lib/browser.js
@ ./models/models.js
@ ./views/NewPost/NewPost.jsx
@ ./routes.jsx
@ ./index.jsx
@ multi (webpack)-dev-server/client?http://localhost:3000 webpack/hot/dev-server ./index.jsx .
webpack: Failed to compile.
Voici mon fichier webpack.config.js:
const path = require('path');
const webpack = require('webpack');
// env
const buildDirectory = 'public';
module.exports = {
entry: './index.jsx',
output: {
path: path.resolve(buildDirectory),
filename: 'app.js',
},
externals: {
cheerio: 'window',
'react/lib/ExecutionEnvironment': true,
'react/lib/ReactContext': true,
},
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel-loader',
options: {
presets: ['es2015', 'react', 'airbnb', 'stage-0'],
},
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
use: [
'file-loader?hash=sha512&digest=hex&name=[hash].[ext]',
'image-webpack-loader?bypassOnDebug&optimizationLevel=7&interlaced=false',
],
},
],
},
resolve: {
extensions: ['.js', '.jsx'],
},
devServer: {
hot: true,
inline: true,
port: 3000,
historyApiFallback: {
index: 'public/index.html',
},
},
};
Voici mon models.js fichier pour créer le schéma de base de données pour le poste:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const db = mongoose.connect('mongodb://127.0.0.1:27017');
const blogSchema = new Schema({
title: String,
author: String,
body: String,
date: { type: Date, default: Date.now },
});
const Post = mongoose.model('Blog', blogSchema);
module.exports = Post;
Voici le composant (NewPost.jsx) J'essaie d'importer le modèle afin que je puisse utiliser ce formulaire pour démarrer sav postes dans la base de données.
import React from 'react';
import Layout from '../../components/Layout/Layout';
import Post from '../../models/models';
const NewPost =() => (
<Layout>
<section className="form-wrapper" id="post-form">
<h2>New Post</h2>
<form>
<label htmlFor="post-title">Post title</label><br />
<input type="text" placeholder="Post title" required />
<div className="text-wrapper">
<textarea className="text-area" />
</div>
<button type="submit">Submit</button>
</form>
</section>
</Layout>
);
export default NewPost;
De plus, mongoose est sauvegardé en tant que déviance. Les extraits de code spécifiques sont ci-dessus, mais voici le repo si vous souhaitez l'exécuter: https://github.com/capozzic1/react-blog
Ne pas mélanger le code côté serveur avec le code côté client – Gerardo
Dois-je avoir un certain type de contrôleur entre le modèle/composant? –
React est exécuté du côté client alors que mongoose ne l'est pas. Ce n'est pas un framework MVC donc toutes les données que vous voulez montrer dans le client dont vous avez besoin pour faire toutes ces demandes du client, il y a beaucoup de tutoriels sur la façon de faire cela. Donc, fondamentalement, une API. – Gerardo