在节点 js "secret should be set" 和 react "npm ERR! code ELIFECYCLE" 中出错



我正在Mern Stack做一个项目。我对后端开发相当陌生,mern 堆栈是我第一次遇到。一切都很顺利,我尝试使用 stripe js 并且它工作正常,但我不希望它出现在我的项目中。所以我决定在 stripe js 之前用我以前的代码替换我的整个文件夹。 现在的问题是我错误地删除了前端和后端部分的 .env 文件以及 package.json 文件。 我尝试通过再次创建 .env 文件来解决此问题,并在一起删除所有节点模块文件后执行 npm 安装,但似乎没有任何效果。它在后端的node_modules部分给出错误"错误:应设置机密" 而前端的这个错误

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! projfrontend@0.1.0 start: `react-scripts start`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the projfrontend@0.1.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR!     C:UsersRaj98AppDataRoamingnpm-cache_logs2020-05-21T19_16_38_946Z-debug.log
D:projfrontend>npm update
> core-js-pure@3.6.5 postinstall D:projfrontendnode_modulescore-js-pure
> node -e "try{require('./postinstall')}catch(e){}"

//node_modules>express_jwt

var jwt = require('jsonwebtoken');
var UnauthorizedError = require('./errors/UnauthorizedError');
var unless = require('express-unless');
var async = require('async');
var set = require('lodash.set');
var DEFAULT_REVOKED_FUNCTION = function(_, __, cb) { return cb(null, false); };
function isFunction(object) {
return Object.prototype.toString.call(object) === '[object Function]';
}
function wrapStaticSecretInCallback(secret){
return function(_, __, cb){
return cb(null, secret);
};
}
module.exports = function(options) {
if (!options || !options.secret) throw new Error('secret should be set');
var secretCallback = options.secret;
if (!isFunction(secretCallback)){
secretCallback = wrapStaticSecretInCallback(secretCallback);
}
var isRevokedCallback = options.isRevoked || DEFAULT_REVOKED_FUNCTION;
var _requestProperty = options.userProperty || options.requestProperty || 'user';
var _resultProperty = options.resultProperty;
var credentialsRequired = typeof options.credentialsRequired === 'undefined' ? true : options.credentialsRequired;
var middleware = function(req, res, next) {
var token;
if (req.method === 'OPTIONS' && req.headers.hasOwnProperty('access-control-request-headers')) {
var hasAuthInAccessControl = !!~req.headers['access-control-request-headers']
.split(',').map(function (header) {
return header.trim();
}).indexOf('authorization');
if (hasAuthInAccessControl) {
return next();
}
}
if (options.getToken && typeof options.getToken === 'function') {
try {
token = options.getToken(req);
} catch (e) {
return next(e);
}
} else if (req.headers && req.headers.authorization) {
var parts = req.headers.authorization.split(' ');
if (parts.length == 2) {
var scheme = parts[0];
var credentials = parts[1];
if (/^Bearer$/i.test(scheme)) {
token = credentials;
} else {
if (credentialsRequired) {
return next(new UnauthorizedError('credentials_bad_scheme', { message: 'Format is Authorization: Bearer [token]' }));
} else {
return next();
}
}
} else {
return next(new UnauthorizedError('credentials_bad_format', { message: 'Format is Authorization: Bearer [token]' }));
}
}
if (!token) {
if (credentialsRequired) {
return next(new UnauthorizedError('credentials_required', { message: 'No authorization token was found' }));
} else {
return next();
}
}
var dtoken;
try {
dtoken = jwt.decode(token, { complete: true }) || {};
} catch (err) {
return next(new UnauthorizedError('invalid_token', err));
}
async.waterfall([
function getSecret(callback){
var arity = secretCallback.length;
if (arity == 4) {
secretCallback(req, dtoken.header, dtoken.payload, callback);
} else { // arity == 3
secretCallback(req, dtoken.payload, callback);
}
},
function verifyToken(secret, callback) {
jwt.verify(token, secret, options, function(err, decoded) {
if (err) {
callback(new UnauthorizedError('invalid_token', err));
} else {
callback(null, decoded);
}
});
},
function checkRevoked(decoded, callback) {
isRevokedCallback(req, dtoken.payload, function (err, revoked) {
if (err) {
callback(err);
}
else if (revoked) {
callback(new UnauthorizedError('revoked_token', {message: 'The token has been revoked.'}));
} else {
callback(null, decoded);
}
});
}
], function (err, result){
if (err) { return next(err); }
if (_resultProperty) {
set(res, _resultProperty, result);
} else {
set(req, _requestProperty, result);
}
next();
});
};
middleware.unless = unless;
middleware.UnauthorizedError = UnauthorizedError;
return middleware;
};
module.exports.UnauthorizedError = UnauthorizedError;

//auth.js(controller(

const User = require("../models/user");
const { check, validationResult } = require("express-validator");
var jwt = require("jsonwebtoken");
var expressJwt = require("express-jwt");
exports.signup = (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({
error: errors.array()[0].msg
});
}
const user = new User(req.body);
user.save((err, user) => {
if (err) {
return res.status(400).json({
err: "NOT able to save user in DB"
});
}
res.json({
name: user.name,
email: user.email,
id: user._id
});
});
};
exports.signin = (req, res) => {
const errors = validationResult(req);
const { email, password } = req.body;
if (!errors.isEmpty()) {
return res.status(422).json({
error: errors.array()[0].msg
});
}
User.findOne({ email }, (err, user) => {
if (err || !user) {
return res.status(400).json({
error: "USER email does not exists"
});
}
if (!user.autheticate(password)) {
return res.status(401).json({
error: "Email and password do not match"
});
}
//create token
const token = jwt.sign({ _id: user._id }, process.env.SECRET);
//put token in cookie
res.cookie("token", token, { expire: new Date() + 9999 });
//send response to front end
const { _id, name, email, role } = user;
return res.json({ token, user: { _id, name, email, role } });
});
};
exports.signout = (req, res) => {
res.clearCookie("token");
res.json({
message: "User signout successfully"
});
};
//protected routes
exports.isSignedIn = expressJwt({
secret: process.env.SECRET,
userProperty: "auth"
});
//custom middlewares
exports.isAuthenticated = (req, res, next) => {
let checker = req.profile && req.auth && req.profile._id == req.auth._id;
if (!checker) {
return res.status(403).json({
error: "ACCESS DENIED"
});
}
next();
};
exports.isAdmin = (req, res, next) => {
if (req.profile.role === 0) {
return res.status(403).json({
error: "You are not ADMIN, Access denied"
});
}
next();
};

//auth.js(routes(

var express = require("express");
var router = express.Router();
const { check, validationResult } = require("express-validator");
const { signout, signup, signin, isSignedIn } = require("../controllers/auth");
router.post(
"/signup",
[
check("name", "name should be at least 3 char").isLength({ min: 3 }),
check("email", "email is required").isEmail(),
check("password", "password should be at least 3 char").isLength({ min: 3 })
],
signup
);
router.post(
"/signin",
[
check("email", "email is required").isEmail(),
check("password", "password field is required").isLength({ min: 1 })
],
signin
);
router.get("/signout", signout);
module.exports = router;

//app.js

require("dotenv").config();
const mongoose = require("mongoose");
const express = require("express");
const app = express();
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const cors = require("cors");
//My routes
const authRoutes = require("./routes/auth");
const userRoutes = require("./routes/user");
const categoryRoutes = require("./routes/category");
const productRoutes = require("./routes/product");
const orderRoutes = require("./routes/order");
//DB Connection
mongoose
.connect(process.env.DATABASE, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true
})
.then(() => {
console.log("DB CONNECTED");
});
//Middlewares
app.use(bodyParser.json());
app.use(cookieParser());
app.use(cors());
//My Routes
app.use("/api", authRoutes);
app.use("/api", userRoutes);
app.use("/api", categoryRoutes);
app.use("/api", productRoutes);
app.use("/api", orderRoutes);
//PORT
const port = process.env.PORT || 8000;
//Starting a server
app.listen(port, () => {
console.log(`app is running at ${port}`);
});

我正在结束这个项目,不幸的是把所有的事情都搞砸了。请帮助我摆脱困境

后端错误的 SS:https://i.stack.imgur.com/AJHxe.png

前端错误的SS:https://i.stack.imgur.com/PqkvI.png

我的问题是require('dotenv')const authRoutes = require('./routes/auth');server.js的顺序不正确。

在我的原始代码上,我有

const authRoutes = require("./routes/auth");
require("dotenv").config();

所以在挖了网之后,我从 https://github.com/linnovate/meanio/issues/53 找到了解决方案。require("dotenv").config();应该是第一个,然后const authRoutes = require("./routes/auth");如下所示。

require("dotenv").config();    
const authRoutes = require("./routes/auth");

在我的情况下,我更新了expressJwt,其中必须添加密钥和算法。

喜欢这个

const authenticate = jwt({
secret: 'secret',
algorithms: ['HS256']
});

尝试首先硬核 process.env.SECRET(其中的值应与 env 文件匹配(,如果它有效,请尝试:require('dotenv').config({ path: 'env file path' })文件中。 此外,尝试将require('dotenv').config({ path: 'env file path' })放在 require 语句的顶部或顶部范围内的某个位置。

文件 .env 粘贴:TOKEN_SECRET= 和一些传递

TOKEN_SECRET=猫123

最新更新