Родился в деревне Скачели (Новгородская губерния, Новгородский уезд, Черновская волость), ныне в Батецком районе Новгородской области в крестьянской семье. Окончил начальную школу, был ремонтным рабочим на станции Люболяды Октябрьской железной дороги.
В годы Гражданской войны Н. А. Васильев с марта 1919 года красноармейцем проходил службу в 17-м отдельном стрелковом батальоне в городе Новгород.
После войны с мая 1921 года Н. А. Васильев — красноармеец внутренней службы по охране водного транспорта Балтийско-Мариинской системы Верхне-Волжского района в город Тверь, с апреля — красноармеец войск внутренней службы Волховского района в городе Новгород. С марта 1923 года — младший и старший агент, стрелок 14-й команды 4-го района стрелковой военизированной охраны путей сообщения Московско-Белорусско-Балтийской железной дороги. В марте 1926 года Н. А. Васильев был направлен на учёбу в Школу усовершенствования комсостава стрелковой охраны путей сообщения, по окончании которой вновь направлен для прохождения службы в состав 4-го района стрелковой военизированной охраны путей сообщения Московско-Белорусско-Балтийской железной дороги, начальник 14-й команды, командир 3-го и 4-го взводов, инструктор штаба и начальник штаба 4-го района, командир 6-го отряда. С мая 1932 года — начальник штаба сначала 27-го, а с января 1933 года — 19-го железнодорожных полков войск ОГПУ в городе Великие Луки. С ноября 1933 года — слушатель высшей пограничной школы войск НКВД, по окончании в июне 1935 года был назначен командиром и военкомом 64-го железнодорожного полка войск НКВД. С апреля 1937 года Н. А. Васильев — командир 22-го Колымского стрелкового полка войск НКВД Приморского округа. С июня 1940 года — начальник Управления пограничных войск НКВД Армянского округа.
С началом Великой Отечественной войны Н. А. Васильев — начальник штаба 250-й стрелковой дивизии, которая находилась на формировании в Московском военном округе в городе Владимир. По завершении формирования дивизия была подчинена 30-й армии Фронта резервных армий, затем Западного фронта и участвовала в Смоленском сражении, вела тяжёлые наступательные и оборонительные бои на белыйском и демидовском направлениях. В сентябре 1941 года Н. А. Васильев был откомандирован на учёбу в Академию Генштаба им. К. Е. Ворошилова, но в ноябре отозван в город Куйбышев и назначен командиром 298-й стрелковой дивизии, которая находилась на формировании в Сибирском военном округе в городе Барнаул. В феврале 1942 года дивизия была переброшена на Западный фронт, где в составе 50-й армии вела оборонительные бои юго-западнее города Юхнов. В августе 1942 года дивизия была передислоцирована на Сталинградский фронт и включена в состав 4-й танковой армии. Части дивизии с ходу вступили в бой с противником в районе села Котлубань (Городищенского района) в общем направлении Малая Россошка и нанесли ему существенный урон в живой силе и боевой технике. 4 августа 1942 года Н. А. Васильеву было присвоено очередное звание генерал-майор. В последующем дивизия вела тяжёлые наступательные и оборонительные бои в составе 4-й танковой и 24-й армий Донского фронт. В декабре 1942 года дивизия была передана в состав 21-й армии этого же фронта и участвовала в ликвидации окружённой под Сталинградом группировки противника, за что генерал-майор Н. А. Васильев был награждён орденом Суворова 2-й степени. За боевые отличия в Сталинградской битве, мужество и героизм личного состава 298-я стрелковая дивизия была преобразована в 80-ю гвардейскую. С февраля 1943 года генерал-майор Н. А. Васильев исполнял должность заместителя командующего войсками 64-й (с апреля 1943 года — 7-я гвардейская) армии в составе Донского, затем Воронежского фронтов, в этой должности занимался укреплением обороны армии на реке Северский Донец в районе города Белгород. С 17 апреля 1943 года — командир 24-го гвардейского стрелкового корпуса, который в составе этих же армии и фронта участвовал в Белгородско-Харьковской наступательной операции и освобождении городов Белгород и Харьков. За умелое руководство частями корпуса Н. А. Васильев был награждён орденом Кутузова 2-й степени. В конце сентября соединения и части корпуса вышли к реке Днепр севернее города Верхнеднепровск и форсировали её. «Только благодаря находчивости генерала Васильева, сумевшего мобилизовать подручные переправочные средства и привлечь к помощи местное население…» — отмечалось в аттестационном листе на присвоение ему воинского звания генерал-лейтенанта. Части корпуса в числе первых форсировали Днепр с ходу и захватили плацдарм на правом берегу, за что Н. А. Васильеву 26 октября 1943 года было присвоено звание Героя Советского Союза. В январе 1944 года корпус участвовал в Кировоградской наступательной операции и освобождении города Кировоград. 17 января 1944 года Н. А. Васильеву было присвоено очередное звание генерал-лейтенант. В последующем его части, форсировав реку Южный Буг в районе города Первомайск, преследовали противника в направлении городов Котовск, Рыбница, в мае 1944 года — вступили на территорию Румынии и завязали бои южнее города Ботошани. С июня 1944 года Н. А. Васильев — командир 1-го стрелкового корпуса 43-й армии 1-го Прибалтийского фронта. Корпус принимал участие в Витебско-Оршанской, Полоцкой, Шяуляйской, Рижской и Мемельской наступательных операциях, в освобождении Прибалтики и разгроме курляндской группировки противника, за что генерал-лейтенант Н. А. Васильев был награждён орденами Кутузова 1-й степени и Суворова 2-й степени.
После войны генерал-лейтенант Н. А. Васильев продолжал командовать 1-м стрелковым корпусом. С апреля 1948 года находился на учёбе на Высших академических курсах при Высшей военной академии им. К. Е. Ворошилова. По их окончании с апреля 1949 года командовал 36-м гвардейским стрелковым корпусов Прибалтийского военного округа, с декабря 1949 года — главный военный советник при главнокомандующем Корейской народной армией, с июля 1950 года — по совместительству военный атташе при посольстве СССР в КНДР. Участвовал в разработке плана нападения Северной Кореи на Южную. С ноября 1950 года находился в распоряжении Главного управления кадров, затем в мае 1951 года был назначен старшим военным советником командующего Румынской народной армии. С апреля 1957 года — начальник особой группы, а с мая 1958 года — заместитель начальника 5-го управления Главного разведывательного управления (ГРУ) Генштаба. С октября 1959 года — военный атташе при посольстве СССР в КНР. С апреля 1964 года состоял в распоряжении Главного разведывательного управления Генштаба, затем в августе того же года был назначен начальником факультета офицеров стран народной демократии Военно-дипломатической академии Советской Армии. С октября 1968 года в отставке.
Скончался в Москве 27 октября 1971 года. Похоронен на Введенском кладбище города.