Вопросы по тегу: express

(14)

Импорт машинописного текста/как против импорта/требования?

Я использую TypeScript с Express/Node.js.Для потребляющих модулей в Руководстве по TypeScript показан следующий синтаксис:импорт экспресс = требуется('экспресс');Но также файл typescript.d.ts показывает:импорт * как экспресс из "экспресс";Я также искал в блоге MSDN, но ничего не нашел.Какой из них более правильный на начало 2016 года? Каковы различия между ними, если таковые имеются?Где лучше всего найти информацию о последнем синтаксисе, чтобы я мог найти эту информацию в будущем?
A

Adam Thompson

6 лет назад

Ответов: 2

Make Axios send cookies in its requests automatically

I am sending requests from the client to my Express.js server using Axios. I set a cookie on the client and I want to read that cookie from all Axios requests without adding them manually to request by hand. This is my clientside request example:axios.get(`some api url`).then(response => ... I tried to access headers or cookies by using these properties in my Express.js server:req.headers req.cookies Neither of them contained any cookies. I am using cookie parser middleware:app.use(cookieParser()) How do I make Axios send cookies in requests automatically? Edit:I set cookie on the client like this:import cookieClient from 'react-cookie' ... let cookie = cookieClient.load('cookie-name') if(cookie === undefined){ axios.get('path/to/my/cookie/api').then(response => { if(response.status == 200){ cookieClient.save('cookie-name', response.data, {path:'/'}) } }) } ... While it's also using Axios, it is not relevant to the question. I simply want to embed cookies into all my requests once a cookie is set.
K

Kunok

5 лет назад

Ответов: 14

Расширение объекта экспресс-запроса с помощью Typescript

Я пытаюсь добавить свойство для выражения объекта запроса из промежуточного программного обеспечения с помощью машинописного текста. Однако я не могу понять, как добавить объекту дополнительные свойства. Я бы предпочел по возможности не использовать скобки.Я ищу решение, которое позволило бы мне написать что-то подобное (если возможно):app.use((req, res, next) => { req.property = setProperty(); next(); });
I

Isak Ågren

6 лет назад

Ответов: 23

express.json против bodyParser.json

Я пишу относительно новое приложение, и мне было интересно, что мне использовать:express.json() или bodyParser.json() Могу я предположить, что они делают то же самое.Я хотел бы просто использовать express.json (), поскольку он уже встроен.
u

user7742676

4 года назад

Ответов: 5

Невозможно стилизовать тело в style.css (Node.js)

Я только что запустил базовый сайт Node.js, но столкнулся с какой-то странной проблемой. Используя таблицу стилей style.css, которая используется по умолчанию при использовании Express, я пытаюсь стилизовать тело, но, похоже, оно не распознает его. Единственное решение - добавить класс body к фактическому телу и изменить объявление css на .body. Почему приведенный ниже код не работает?style.cssbody { background-color: black; margin-top: 50px; } .navbar { height: 50px; } .footer { text-align: center; } index.ejs
J

Jordan

6 лет назад

Ответов: 1

Поиск по ObjectId в схеме мангуста nodejs

Я использую мангуст с nodejs. У меня есть схема элемента и схема пользователя, приведенная ниже.var userSchema = new Schema({ email: { type: String, required: true, unique: true }, password: { type: String, required: true }, items : [{ type: Schema.Types.ObjectId, ref: 'Item' }] }); var itemSchema = new Schema({ name: { type: String, required: true }, _owner : { type: Schema.Types.ObjectId, ref: 'User' } }); Я пытаюсь найти элемент по идентификатору пользователя (_owner в схеме элемента).Я пытался найти напрямуюvar uid = req.decoded._id; var item = Item.findOne({"_owner": uid}); console.log(item.name); // undefined При поиске аналогичного я обнаружил, что идентификатор должен быть в объекте ObjectId, поэтому я попробовалvar uid = new mongoose.Types.ObjectId(req.decoded._id); var item = Item.findOne({"_owner": uid}); console.log(item.name); // undefined В обоих случаях item.name не определено. Обратите внимание, что я перепроверил значение req.decoded._id(путем печати) с помощью db, чтобы оно не было неопределенным и присутствует в db.Я что-то делаю не так?
s

singhakash

6 лет назад

Ответов: 1

nodejs + экспресс-автоматическое перенаправление, когда пользователь нажимает другой URL-адрес

Я сделал доску объявлений, используя nodejs и ejs, и развернул ее на heroku. Моя проблема в том, что при открытии веб-сайта (например, https://cool-plains-2948.herokuapp.com/) ничего не отображается, потому что доска объявлений отображается только тогда, когда URL-адрес / posts.Есть ли способ автоматически перенаправлять на / posts при открытии веб-сайта или когда пользователь по ошибке нажимает на другие URL-адреса?Я знаю, как это сделать в angularjs, используя $ urlRouterProvider.otherwise ('/'); но есть ли способ сделать на задней стороне? используя nodejs?редактировать: что я сделал, и это сработало:app.use(function(req, res, next) { if(req.url === '/') { res.redirect('/posts'); } });//redirection
k

kkagill

6 лет назад

Ответов: 1

Что делает body-parser с экспрессом?

Я не понимаю, зачем нам body-parser в приложении Express, ведь мы можем получать данные без использования body-parser. А что на самом деле и как делает?
j

jiten

6 лет назад

Ответов: 11

Passport.js serializeUser и desializeUser не вызываются никогда?

У меня возникла проблема с Passport-local. Похоже, что ни serializeuser, ни deserializeUser не вызываются. После прочтения других сообщений на SO, кажется, что многие люди, столкнувшиеся с этой проблемой, не включали bodyParser. Здесь представлен мой app.js:var express = require('express'); var app = express(); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var db_config = require('./config/database'); var mongoose = require ('mongoose'); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); //loads passport implementation require('./config/passport')(app); //loads all routes require('./config/routes')(app); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { //initialize connection to database mongoose.connect(db_config.development); app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } // development error handler // will print stacktrace if (app.get('env') === 'test') { //initialize connection to database mongoose.connect(db_config.test); app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } if(app.get('env') === 'production'){ //initialize connection to database mongoose.connect(db_config.production); // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); } module.exports = app; Здесь находится config/passport.js:module.exports = function(app){ var passport = require ('passport'); var LocalStrategy = require('passport-local').Strategy; var session = require('express-session'); var User = require('../models/user.js'); // ========================================================================= // passport session setup ================================================== // ========================================================================= // required for persistent login sessions // passport needs ability to serialize and unserialize users out of session // used to serialize the user for the session passport.serializeUser(function(user, done) { console.log('serialize'); done(null, user._id); }); // used to deserialize the user passport.deserializeUser(function(id, done) { console.log('deserialize'); User.findById(id, function(err, user) { done(err, user); }); }); //configure passport http-basic strategy passport.use(new LocalStrategy({ usernameField: "username", passwordField: "password" }, function(username, password, done){ User.findOne({username: username}, function(err, user){ if(err) return done(err); if(!user || !user.validatePassword(password)) return done(null, false); console.log("inside LocalStrategy: " + user); return done(null, user); }); })); //setup express-session app.use(session({ secret: "secret", saveUninitialized: true, resave: true })); app.use(passport.initialize()); app.use(passport.session()); return passport; }; Здесь представлен мой routes.js:module.exports = function(app){ var routes = require('../routes/index'); var users = require('../routes/users'); var walks = require('../routes/walks'); var isAuthenticated = function(req, res, next){ if(req.isAuthenticated()) next(); res.status(401).send('You must login first.'); }; app.use('/', routes); app.all('*', isAuthenticated); app.use('/users', users); app.use('/walks', walks); }; Здесь представлен routes/index.js:var router = require('express').Router(); var passport = require('passport'); var controller = require('../controllers/index'); router.get('/', controller.index); router.post('/signup', controller.signup); router.post('/login', passport.authorize('local'), controller.login); module.exports = router; И наконец, вот контроллер/index.js:var User = require('../models/user.js'); var handleError = require('../handlers/error'); var controller = {}; controller.index = function(req, res, next) { res.render('index', { title: 'Express' }); }; controller.signup = function(req, res){ console.log(req.body); var user = new User(); user.username = req.body.username; user.password = req.body.password; user.save(function(err, user){ if(err) { console.log(err.code); handleError(res, err); } return res.send(user); }); }; controller.login = function(req, res){ console.log('inside /login'); console.log('req.user: ' + req.user); console.log('req.session: '); console.log(req.session); console.log('req.body: '); console.log(req.body); res.send(req.user); }; module.exports = controller; В POSTMAN я сначала создаю пользователя с помощью POST-запроса к /signup с:{ "username": "bob", "password": "password123" } Затем я POST в /login с теми же учетными данными, вот результат: inside LocalStrategy: { __v: 0, username: 'bob', password: '$2a$10$Oa/Q9C5Elsoa0P4427P6fOXWIKerlD937FYgLFrwCWwXxGW1gbsoW', _id: 5685d6845c7b208693b71091 } inside /login req.user: undefined req.session: Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true } } req.body: { username: 'bob', password: 'password123' } POST /login 200 205.704 ms - - Как видите, console.log() в обоих serializeUser и deserializeUser не вызывается. Почему так происходит? Я в полной растерянности, честно говоря, я понятия не имею, что еще можно попробовать.
D

Dustin

6 лет назад

Ответов: 1

Node.js: Загрузка большого файла в MongoDB И данные из текстовых вводов на одной странице в разные коллекции

Здравствуйте и с Новым годом всех:)В файле .ejs есть две формы: одна для ввода текста, другая для загрузки файла: Tour Heading * Tour Info * Add Tour Choose File Чтобы получить информацию из формы, где action="/office/new-tour", я могу использовать этот код в app.js:Установка:const express = require("express"); const bodyParser = require("body-parser"); const mongoose = require("mongoose"); const http = require("http"); const url = require("url"); const app = express(); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.set("view engine", "ejs"); А фактический код с логикой: app.get("/office", function (req, res) { res.render("office"); }); //Mongo DB connection for form data saving mongoose.connect("mongodb://localhost:27017/kbTourAppDB", { useNewUrlParser: true, useUnifiedTopology: true, }); const ToursSchema = { tour: { tourHeading: String, tourDescription: String }, program: { tourProgram: String, tourProgramDescription: String }, }; const Tour = mongoose.model("Tour", ToursSchema); app.post("/office/new-tour", (req, res) => { const addedTour = new Tour({ tour: { tourHeading: req.body.tourHeading, tourDescription: req.body.tourDescription, }, program: { tourProgram: req.body.tourProgram, tourProgramDescription: req.body.tourProgramDescription, }, //add author when the login page is ready }); addedTour.save(function (err) { if (err) { console.log("err: ", err); } else { console.log("sucess added new Tour to db"); } }); res.redirect("/office"); }); app.listen(3000, function () { console.log("listening on port 3000"); }); Приведенный выше код успешно работает для получения текстовых данных в базу данных, однако я не могу использовать его для загрузки файлов в базу данных (в основном jpeg и pdf). Для этого я нашел решение с помощью Multer и GridFS.Установка:const express = require("express"); const bodyParser = require("body-parser"); const mongoose = require("mongoose"); const path = require("path"); const crypto = require("crypto"); const multer = require("multer"); const GridFsStorage = require("multer-gridfs-storage"); const Grid = require("gridfs-stream"); const methodOverride = require("method-override"); const http = require("http"); const url = require("url"); const app = express(); app.use(bodyParser.json()); app.use(methodOverride("_method")); app.use(bodyParser.urlencoded({ extended: true })); app.set("view engine", "ejs"); И код здесь: app.get("/office", function (req, res) { res.render("office"); }); const conn = mongoose.createConnection("mongodb://localhost:27017/kbTourAppDB"); let gfs; conn.once("open", () => { gfs = Grid(conn.db, mongoose.mongo); gfs.collection("uploads"); }); //create storage object const storage = new GridFsStorage({ url: "mongodb://localhost:27017/kbTourAppDB", file: (req, file) => { return new Promise((resolve, reject) => { crypto.randomBytes(16, (err, buf) => { if (err) { return reject(err); } const filename = buf.toString("hex") + path.extname(file.originalname); const originalFileName = file.originalname; const fileInfo = { filename: filename, bucketName: "uploads", }; resolve(fileInfo); }); }); }, }); const upload = multer({ storage }); app.post("/office/add-score", upload.single("file"), (req, res) => { res.redirect("/office"); }); app.listen(3000, function () { console.log("listening on port 3000"); }); Этот код работает для загрузки файлов в базу данных...Как я могу написать код, который позволит мне делать оба действия на одной странице: например, загружать данные текстового ввода в коллекцию MongoDB 'tour-data', а файлы из другой формы - в коллекцию 'uploads'..Большое спасибо за помощь!
i

iuriiGav

год назад

Ответов: 1

Как решить ошибку Error : cannot find module "ejs"?

Я начал новый (и первый) проект express.js, используя ejs, но столкнулся со следующей ошибкой при доступе к странице :Error: Cannot find module 'ejs ' Require stack: - C:\wamp64\www\myproject\node_modules\express\lib\view.js - C:\wamp64\www\myproject\node_modules\express\lib\application.js - C:\wamp64\www\myproject\node_modules\express\lib\express.js - C:\wamp64\www\myproject\node_modules\express\index.js - C:\wamp64\www\myproject\server.js at Function.Module._resolveFilename (node:internal/modules/cjs/loader:925:15) at Function.Module._load (node:internal/modules/cjs/loader:769:27) at Module.require (node:internal/modules/cjs/loader:997:19) at require (node:internal/modules/cjs/helpers:92:18) at new View (C:\wamp64\www\myproject\node_modules\express\lib\view.js:81:14) at Function.render (C:\wamp64\www\myproject\node_modules\express\lib\application.js:570:12) at ServerResponse.render (C:\wamp64\www\myproject\node_modules\express\lib\response.js:1012:7) at C:\wamp64\www\myproject\server.js:10:13 at Layer.handle [as handle_request] (C:\wamp64\www\myproject\node_modules\express\lib\router\layer.js:95:5) at next (C:\wamp64\www\myproject\node_modules\express\lib\router\route.js:137:13) Вот как я действую с самого начала : Создайте новую папку myproject Создайте новый файл server.js node init Модифицировали package.json, чтобы добавить nodemon npm install --save nodemon npm install --save express npm install --save ejs Мой файл server.js :var app = require('express')(); app.set('view engine', 'ejs'); app.get('/', function (req, res) { res.setHeader('Content-Type', 'text/plain'); res.send('Accueil'); }) .get('/album', function(req, res){ res.setHeader('Content-Type', 'text/plain'); res.render('album.ejs ', {name :'yop'}); }) .use(function(req, res, next){ res.setHeader('Content-Type', 'text/plain'); res.status(404).send('Page introuvable !'); }); app.listen(8080); Мой файл package.json :{ "name": "myproject", "version": "1.0.0", "description": "", "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "nodemon server.js" }, "author": "", "license": "ISC", "dependencies": { "ejs": "^3.1.5", "express": "^4.17.1", "nodemon": "^2.0.6" } } Структура моего проекта :My project directory node_modules folder views folder album.ejs file package.json server.js
A

Aurélien

год назад

Ответов: 2

Как преобразовать дату "Wed Jan 01 2020 00:00:00 GMT+0530 (India Standard Time) " в JAN 01,2020 с помощью JavaScript?

В настоящее время я получаю дату из базы данных в формате Wed Jan 01 2020 00:00:00 GMT+0530 (стандартное время Индии), но мне нужна дата в формате JAN O1,2020, и я не хочу использовать для этого mon=ment.js. Есть ли другие способы добиться этого?
m

manju sri lakshmi

год назад

Ответов: 2

Как отправить ответ в Express

Я использую express и MongoDB и хочу получать обновления в реальном времени, когда в моей БД происходят какие-либо изменения. Я использую поток изменений MongoDB. Но когда я помещаю функцию изменения внутрь маршрута, она отправляет ответ только тогда, когда я перехожу по маршруту, а когда я помещаю функцию изменения вне маршрута, я не могу отправить ответ.Вот моя проблема: как отправить ответ, когда в моей коллекции происходит какое-либо изменение.const testSchema = new Schema({ name: { type: String, required: true }, email: { type: String, required: true }, }); const model = mongoose.model('test', testSchema); //change model.watch().on('change', (data) => { console.log(data); }); router.put('/update', async (req, res) => { const data = req.body; const info = await model.updateOne(data); res.send(info); });
M

Mohd Sabban

год назад

Ответов: 2

Как я могу установить плитку моего сайта (<title> равную blog.title?

ок, я делаю маленький сайт блога для развлечения, и мне интересно, как я могу установить заголовок страницы = blog.title (используя nodejs и express). вот что я пробовал, но это не сработало ;(. app.get('/blogs/:id', (req, res) => { const id = req.params.id; Blog.findById(id) .then(result => { res.render('details', { blog: result, title: `Детали анонса ${blog.title}` } }); }) .catch(err => { console.log(err); }); }); У кого-нибудь есть методы, которые могут сработать?
H

Henning Amlo

год назад

Ответов: 1

2022 WebDevInsider